我想用数组中的一些整数填充模板,但在C ++中似乎不允许这样做。一个例子:
我用Integers定义一个常量数组。
const int array[4] = {0, 1, 2, 3};
我的模板就是这样:
template<int T> TestClass ...
在下面,第一种方式没问题,但第二种方式不能编译:
TestClass<12> ... // works
TestClass<array[0]> ... // does not work
编译器说操作员&#39; [&#39;不允许在temlate中。但究竟是什么原因以及如何优雅地解决这种情况呢?是否也可以使用i
循环的计数器for
来选择数组的整数,如:
TestClass<array[i]>
答案 0 :(得分:3)
将数组转换为constexpr
变量:
constexpr int array[4] = {0, 1, 2, 3};
甚至更好:
constexpr std::array<int, 4> myArray{0, 1, 2, 3};
由于您的数组将为constexpr
,因此它的用法在编译时有效。
请务必为std::array
版本启用c ++ 14。
答案 1 :(得分:0)
类模板TestClass ... 中的整数类型模板参数(如int)应该是编译时常量,这就是为什么这样的代码无法编译的原因。