我想有一个数组的长度取决于我的模板的参数,但我不断收到“预期的常量表达式”错误。如何初始化模板中的成员数组
enum MyEnum
{
FIRST,
OTHER
};
template<MyEnum e>
struct MyTemplate
{
static const int arrSize;
int myArr[arrSize]; // error C2057: expected constant expression
// int myArr[e == FIRST ? 4 : 10]; // works, but isn't very readable...
};
template<>
const int MyTemplate<FIRST>::arrSize = 4;
template<>
const int MyTemplate<OTHER>::arrSize = 10;
我必须使用编译器不支持constexpr
,或任何其他C++ 11个特征,我也不能传递数组大小作为模板参数。我也不能使用new
。
感谢
你不能做到这一点,编译器必须知道'arrSize'当你宣布'INT myArr,该[arrSize]' – 101010
IMO,'é== FIRST? 4:10'比引入模板专业化更具有可读性......使用'template'关键字的次数越多,代码的可读性就越差 – Brian
@Brian这是一个例子,但我有10多种可能性码。 – phil