c ++ 11 — Как использовать initializer_list для создания C ++ & lt; array & gt; структур?

Следующий код работает, как и ожидалось, для инициализации вектора структур:

#include <array>
struct node
{
std::string name;
std::string value;
};

const std::vector<node> reqFields ({
{ "query", tmpEmail },
{ "firstname", firstName },
{ "lastname", lastName }
});

Я хочу немного оптимизировать свой код для использования массива C ++ 11, учитывая, что мои данные статичны. Однако следующее не скомпилируется:

const std::array<node, 3>({
{ "query", tmpEmail },
{ "firstname", firstName },
{ "lastname", lastName }
});

Какой правильный синтаксис для инициализации массива? или, может быть, с этим у Visual Studio 15 проблемы?

1

Решение

станд :: вектор имеет конструктор, который принимает initializer_list :

vector( std::initializer_list<T> init,
const Allocator& alloc = Allocator() );

но станд :: массив является совокупным и следует правилам агрегатная инициализация .

Так что вам нужно переключиться с () в {}

const std::array<node, 3> reqFields {
{{ "query", "tmp" },
{ "firstname", "firstName" },
{ "lastname", "lastName" }}
};

увидеть это в прямом эфире на Godbolt.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector