将数组数据插入模板

时间:2016-01-22 21:03:07

标签: c++ arrays templates const

我想用数组中的一些整数填充模板,但在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]>

2 个答案:

答案 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)应该是编译时常量,这就是为什么这样的代码无法编译的原因。