初始化字符串对数组而不提及显式类型

Zos*_*oso 0 c++ initialization c++14

我正在尝试初始化std::arrayof std::pair<std::string, std::string>,但如果不明确包含类型,则无法在调用站点执行此操作std::pair

这是完整的可执行代码链接,以下是相关片段:

以下是别名和声明:

static constexpr size_t NUM_DATA = 3;
using DataPair = std::pair<std::string, std::string>;
using Mapping = std::array<DataPair, NUM_DATA>;

static std::shared_ptr<Foo> create(Mapping&& list);

explicit Foo(Mapping&& pairs);
Run Code Online (Sandbox Code Playgroud)

这是调用站点的代码:

auto x= Foo::create({
    Foo::DataPair{"k1", "v1"}, 
    Foo::DataPair{"k2", "v2"}, 
    Foo::DataPair{"k3", "v3"}
});
// DOESN'T COMPILE!
// auto x= Foo::create({
//     {"k1", "v1"}, 
//     {"k2", "v2"}, 
//     {"k3", "v3"}
// });
Run Code Online (Sandbox Code Playgroud)

我的目标是 C++14。我想避免传入一个std::initializer_list然后准备一个std::array

Som*_*ude 7

你还需要几个大括号{}

一对用于std::array对象,一对用于数组本身,然后一对用于数组内的每个“对”:

auto x= Foo::create({{
    {"k1", "v1"}, 
    {"k2", "v2"}, 
    {"k3", "v3"}
}});
Run Code Online (Sandbox Code Playgroud)