【发布时间】:2015-05-29 13:34:07
【问题描述】:
考虑这段代码
template<typename T>
void call_me(const T& arg) {
}
template<int i>
struct custom_type {
};
void foo(int i)
{
switch (i) {
case 0:
call_me( custom_type<0>() );
break;
case 1:
call_me( custom_type<1>() );
break;
case 2:
call_me( custom_type<2>() );
break;
default:
break;
}
}
switch 语句的用途是不完整的,也就是说,它适用于所有整数,而不仅仅是上面明确提到的少数整数。 C++ 不允许像custom_type<i> 这样的语句,因为i 不是常量表达式。 (..我不能将函数 foo 的参数更改为常量表达式)。此外,我不想使用外部代码生成器来生成巨大的 switch 语句并将其反馈到源代码中..
在 C++/11/14/17 中是否有任何方法允许以优雅的方式编写对 call_me 的函数调用,或者答案只是“不,C++ 是静态类型的。”?
【问题讨论】:
-
这是不可能的,因为函数参数
i是在运行时确定的。但是,如果您解释了您要与这些人一起解决的实际问题,也许会想出一些好主意。 -
如果
i在编译时是未知的,应该是构造函数参数,而不是模板参数
标签: c++