次のようなテンプレートをインスタンス化すると、次のようになります。
template<int i>
int ReturnMeDouble()
{
return 2 * i;
}
次に、コンパイラはコンパイル時に i の値を評価できる必要があります。私の問題は、変数に応じてプログラムで2つの関数のいずれかを呼び出す必要があることです(簡単にするために馬鹿げています)。私のコードは次のようになります。
int returnValue = 0;
switch(value)
{
case 1:
case 2:
case 3:
case 4:
returnValue = ReturnMeDouble<value>();
break;
case 5:
case 6:
returnValue = ReturnMeTriple<value>();
break;
}
本当の ReturnMe... 関数は、それほど単純ではありません。明らかに、この switch ステートメントを使用して、各 case ステートメントの下に個別の呼び出しを提供できますが、最初のケースで、ReturnMeDouble は、4 つの値のいずれかでのみ呼び出すことができます。
コンパイラは、インスタンス化が必要な 4 つの個別の関数テンプレートの周りに条件付きフローを配置する必要があり (事実上、手動で行うことを避けようとしていること)、その方法がわからないというだけですか?
これを行うよりエレガントな方法はありますか?
編集:明確にするために-それほど重要ではない実装では、整数値を使用して、関数内の型選択にいくつかのメタプログラムを適用します。