如何通过聚合初始化来初始化自定义数组 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
的工作方式。
我有自己的基础版 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
的工作方式。