我有一个关于类 Bar
的 constexpr 静态成员的 Bootstrap 问题
这是 Bar
本身的数组。考虑以下完全正确的代码:
struct Foo {
int i;
static const std::array<Foo, 2> A;
};
const std::array<Foo, 2> Foo::A {{{1},{2}}};
现在我想要 Foo::A
不仅是 const,还有 constexpr
。我面临
必须完成静态 constexpr 成员初始化的问题
在类声明中。但是,由于声明尚未完成,
编译器还不知道实例的大小,因此拒绝
制作数组。例如
struct Bar {
int i;
constexpr static const std::array<Bar, 2> A{{{1},{2}}};
};
被拒绝
/usr/include/c++/4.8/array: In instantiation of ‘struct std::array<Bar, 2ul>’:
ess.cpp:14:56: required from here
/usr/include/c++/4.8/array:97:56: error: ‘std::array<_Tp, _Nm>::_M_elems’ has incomplete type
typename _AT_Type::_Type _M_elems;
有办法解决吗?或者解决方法?
最佳答案
目前这是不可能的,编译器无法提前知道 constexpr
是否真的被允许/可能。将成员 A 替换为一个函数,它应该可以工作:
struct Bar
{
int i;
constexpr static std::array<Bar, 2> get_A()
{
return {{{1}, {2}}};
}
};
相关(几乎重复):static constexpr member of same type as class being defined
关于c++ - 作为静态 constexpr 成员的类元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22178366/