Как использовать initializer_list для создания C ++ <array>структур? - PullRequest
0 голосов
/ 10 ноября 2018

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

#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 Ответ

0 голосов
/ 10 ноября 2018

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

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

, но std :: array является агрегатом и следует правилам агрегатной инициализации .

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...