繁体   English   中英

调用可变参数类型的静态constexpr数组时未定义的引用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM