如何使数组的派生类型接受聚合初始化?

use*_*020 4 c++ initialization c++11 stdarray

例如

class A : public std::array<int, 3>
{
};
Run Code Online (Sandbox Code Playgroud)

A a{1, 2, 3}; // failed currently.
Run Code Online (Sandbox Code Playgroud)

如何使数组的派生类型接受聚合初始化?

101*_*010 7

您可以提供如下的可变参数模板构造函数:

class A : public std::array<int, 3> {
public:
  template<typename... Args> constexpr A(Args&& ...args) 
    : std::array<int, 3>{{std::forward<Args>(args)...}} {}
};
Run Code Online (Sandbox Code Playgroud)

现场演示

编辑:

以下版本也适用于Visual Studio:

class A : public std::array<int, 3> {
public:
    template<typename... Args> constexpr A(Args&& ...args) 
      : std::array<int, 3>(std::array<int,3>{std::forward<Args>(args)...}) {}
};
Run Code Online (Sandbox Code Playgroud)

现场演示