所以最近我尝试制作了以下结构:
template<int... Factors>
struct Data
{
static constexpr int arr[sizeof...(Factors)] = {Factors...};
};
int main()
{
Data<1, 2, 3> p;
cout << p.arr[0] << " " << p.arr[1] << " " << p.arr[2] << endl;
return 0;
}
它工作正常。
但是,如果我使用static constexpr int arr[sizeof...(Factors)] = {Factors...};
切换static constexpr std::array<int, sizeof...(Factors)> arr {Factors...};
,则上面的代码会向我发送
对'数据&lt; 1,2,3&gt; :: arr'
的未定义引用
错误。
由于我对可变参数模板相当新,我想知道这两者之间有什么区别,为什么会出现错误?
答案 0 :(得分:1)
你应该添加这个
template <int ... Factors>
constexpr std::array<int, sizeof...(Factors)> Data<Factors...>::arr;
在结构之外。
我建议用inizialization双重括号
static constexpr std::array<int, sizeof...(Factors)> arr { { Factors... } };