如何通过聚合初始化来初始化自定义数组 class?

How can I initialize a custom Array class by aggregate initialization?

我有自己的基础版 std::array

外观如下:

template<typename T, size_t N> 
class Array {
  public:     
  Array()=default;
  T& operator[](size_t n) {return m_data[n];}     
  size_t Size() {return N;}
  private:     
  T m_data[N]; 
};

我可以这样初始化:

    Array<int, 3> arr;
    arr[0] = 11;
    arr[1] = 22;
    arr[2] = 33;

但是如果我想像这样对它进行聚合初始化怎么办:

Array<int, 3> arr = { 1, 2, 3 };

我该怎么做?

为了使聚合初始化工作,您需要使 class 成为聚合 class。为此,您需要使数组成员 public。根据标准版本,您可能还需要删除默认的默认构造函数 Array()=default; 并让它隐式定义。根本不声明任何构造函数。

然后 class 将成为聚合 class,然后初始化将如所示执行聚合初始化那样工作。

这也是 std::array 的工作方式。