3

このようなコードがある場合

switch(some_value)
{
    case 1: call_template_function_x<1>();break;
    case 2: call_template_function_x<2>();break;
    case 3: call_template_function_x<3>();break;
    // etc
}

ここで、「some_value」は実行時にのみ認識されます。スイッチを使用して、実行時の値を、入力としてテンプレート化された定数を持つ N 関数の 1 つに変換しています。

テンプレート化された関数呼び出しの <1> を case ステートメントの値に置き換える方法はありますか?

case n: call_template_function_x<case_value_for_n>();break;
4

1 に答える 1

2

いいえ、0 からある値の最大値までのすべての値のケースを記述しない限り、値を置き換える方法はありません。これはcall_template_function_x<3>()、コンパイル時に既知であり、コンパイラが exe で生成するコードを認識しているためです。そのため、ランタイム値を使用してコンパイラがコードを生成することはできません。

于 2013-11-11T15:27:23.727 に答える