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> 替换为 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 回答