Каков правильный способ инициализации агрегатного типа (например, std::array
) и его подобъектов с помощью вложенных списков инициализаторов в фигурных скобках? Я не хочу напрямую вызывать конструкторы подтипов.
Это повторяющаяся проблема, и я всегда удивляюсь, что приведенный ниже код не работает, поскольку тип элементов указан, поэтому компилятор может вывести правильный конструктор.
Обратите внимание, что тип примера A
не обязательно должен быть агрегатом (но, конечно, он должен поддерживать списки инициализаторов в фигурных скобках).
#include <array>
struct A
{
int values[4];
};
int main()
{
std::array<A, 2> arr{{ 0, 1, 2, 3 }, { 4, 5, 6, 7 }};
// Works only if A is an aggregate, also looks confusing, I don't want to do this
//std::array<A, 2> arr{ 0, 1, 2, 3, 4, 5, 6, 7 };
// I don't want to do this neither
//std::array<A, 2> arr{A{ 0, 1, 2, 3 }, A{ 4, 5, 6, 7 }};
return 0;
}
Но все, что я получаю, это ошибка
error: too many initializers for 'std::array<A, 2ul>'