c++ - 作为静态 constexpr 成员的类元素数组

标签 c++ arrays class c++11 constexpr

我有一个关于类 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/

相关文章:

c++ - 获取 excel 单元格的大小(以像素为单位)

java - 通过修改数组在数组中复制零

javascript - 将 Google Sheets 中的 JSON 数据放入数组中

c++ - C++中访问另一个类的方法

c++ - 向类中添加新功能

c++ - ' ' 标记简单错误之前的预期主表达式

c++ - 使用函数参数的模板参数编写函数

c++ - 如何将 std::transform 与带有附加参数的 lambda 函数一起使用

python - 使用 Python 中的预定义索引对数组重新采样

Ruby:如何使类中只有一个方法公开?