我想用std::initializer_list
初始化基类。
struct A : public std::array<int, 4>
{
// This constructor works fine
A()
: std::array<int, 4>{{ 1, 2, 3, 4 }}
{
}
// THIS CONSTRUCTOR FAILS TO COMPILE
A(std::initializer_list<int> il)
: std::array<int, 4>{il}
{
}
};
第二个构造函数的GCC错误是
错误:必须使用大括号括起初始化程序
初始化数组
我想要的是使用initializer_list初始化新的A实例,如此
A var{{ 1, 2, 3, 4 }}
并将其传递给基类。
答案 0 :(得分:2)
班级std::array
没有构建者使用std::initializer_list
。
你唯一的方法是这样做:
#include <array>
#include <initializer_list>
struct A : public std::array<int, 4>
{
A()
: std::array<int, 4>{{ 1, 2, 3, 4 }}
{
}
A(std::array<int, 4> il)
: std::array<int, 4>(il)
{
}
};
int main ()
{
A a ({{ 1, 2, 3, 4 }});
}
答案 1 :(得分:0)
它说array
可以使用&#34;大括号封装的初始化程序&#34;来初始化。和你的第一个ctor一样,但不是你的第二个initializer_list
。没有带有initializer_list的数组ctor。实际上,除了隐式声明的特殊成员函数之外,没有数组的ctors。