initializer_list в списке инициализации
Я хочу инициализировать базовый класс с 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 для второго конструктора
ошибка: массив должен быть инициализирован инициализатором в скобках
То, что я хочу, это инициализировать новый экземпляр A с initializer_list, как это
A var{{ 1, 2, 3, 4 }}
и передать его в базовый класс.
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 }});
}
Это говорит о том, что array
может быть инициализирован "инициализатором в скобках", как в первом ctor, но не initializer_list
как в твоем втором. Нет массива ctor, который принимает initializer_list. На самом деле, нет массивов для массивов, кроме неявно объявленных специальных функций-членов.