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
你还需要几个大括号{}。
一对用于std::array对象,一对用于数组本身,然后一对用于数组内的每个“对”:
auto x= Foo::create({{
{"k1", "v1"},
{"k2", "v2"},
{"k3", "v3"}
}});
Run Code Online (Sandbox Code Playgroud)