[英]Undefined reference while calling a static constexpr array of variadic types
我有以下课程
template<int ... Args>
struct foo {
constexpr static int arr[sizeof...(Args)]={Args...};
constexpr int dimension(int i) {return arr[i];}
};
但是我在调用dimension
得到了undefined reference to arr
。 如果我在函数dimension
内移动arr
,则该函数将不再是constexpr
,因为它在函数体内需要两个分号。 例如,我做不到
constexpr int a = foo_obj.dimension(2);
我的目标是对变异模板的所有维度进行元编程迭代,并将其与另一个整数进行比较? 理想情况下,如果我有两个foo对象,则要确定它们在每个维度上是否相等。
每个常用的变量都需要一个定义。 这个:
constexpr static int arr[sizeof...(Args)]={Args...};
是同时初始化arr
的声明,但不是定义。 因此,您只需要提供一个定义,该定义必须同时(1)在类外部和(2)仍为constexpr
。 那是:
template<int ... Args>
struct foo {
constexpr static int arr[sizeof...(Args)]={Args...};
constexpr int dimension(int i) const {return arr[i];}
};
template <int... Args>
constexpr int foo<Args...>::arr[sizeof...(Args)];
现在定义了foo<Args...>::arr
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.