我有以下课程
$("[id$='test1']").show();
但我在调用template<int ... Args>
struct foo {
constexpr static int arr[sizeof...(Args)]={Args...};
constexpr int dimension(int i) {return arr[i];}
};
时得到undefined reference to arr
。如果我在函数dimension
内移动arr
,则该函数不再是dimension
,因为它在函数体内需要两个分号。例如,我做不到
constexpr
我的目标是以元编程方式迭代varidic模板的所有维度并将其与另一个整数进行比较?理想情况下,如果我有两个foo对象,我想确定它们在每个维度上是否相等。
答案 0 :(得分:6)
每个使用odr的变量都需要一个定义。这样:
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
。