いくつかの設計方法に基づいて出力を生成するプロトタイプ動作がしばしばあります。私は、私が必要とする多くの機能を可能にする設計方法をテンプレートします。しかし、時にはデザインメソッドが実行時に与えられることがあるので、私は通常、大きなswitch文を書く必要があります。この方法の主な欠点は1つがサポートされているすべての列挙を入力し、関係しているということである - 私は誰もがこのシステムのための素晴らしいパターンを考え出したかどうかについての好奇心実行時パラメータに基づいて整数のテンプレート関数を実行
enum class Operation
{
A, B
};
template<Operation O>
void execute();
template<>
void execute<A>()
{
// ...
}
template<>
void execute<B>()
{
// ...
}
void execute(Operation o)
{
switch (o)
{
case Operation::A: return execute<Operation::A>();
case Operation::B: return execute<Operation::B>();
}
}
:これは通常、このようになります新しい列挙が実装されている場合は、いくつかの場所をメンテナンスします。
e:コンパイル時のテンプレートを使いこなす理由は、HPCのインラインメソッドとconstexprプロパティを継承できるようにすることです。
e2:実際には、暗黙のスイッチ構造を使用して、すべての可能なコードパスをコンパイラに生成させることを求めていると思います。多分再帰的テンプレートマジック?
継承と多型の使用はどうですか? –
私が追加したばかりのように、コンパイラはコンパイル時にインライン化と最適化を行うことが非常に重要です(つまり、コード構造全体が可視で確定的です)。そうでなければ、仮想関数は明らかに問題を解決します。 – Shaggi