我有一个定义为 -
的集合using Parameters = std::vector<int>;
using Group = std::pair<std::string, Parameters>;
std::vector<Group> inputs;
我的意图是使用像
这样的陈述inputs.push_back(group0 /*What goes in here ?*/);
inputs.push_back(group1 /*What goes in here ?*/);
如何使用初始化列表初始化group0
和group1
?
像这样的代码似乎无法正常工作
inputs.push_back(std::make_pair("group0", {1, 2, 3, 4}));
编辑: 已存在关于向量对初始化的问题,但我无法看到second
的{{1}}再次成为集合。
答案 0 :(得分:10)
当你写inputs.push_back(std::make_pair("group0", {1, 2, 3, 4}))
时,你要求make_pair
推断出两个论点的类型。但第二个参数, braced-init-list ,不是表达式,因此它没有类型。因此,模板参数推断失败。
最简单的解决方案是删除对make_pair
的调用,并在任何地方使用 braced-init-lists 。
inputs.push_back({"group0", {1, 2, 3, 4}});
现在,列表初始化将enumerate available constructors并使用外部参数对调用pair
构造函数,并使用内部 braced-init-list的vector
构造函数
答案 1 :(得分:1)
虽然
inputs.push_back({"group0", {1, 2, 3, 4}});
正确地适用于您打算做的事情,我认为使用它更具表现力:
inputs.push_back(std::make_pair("group0", Parameters{1, 2, 3, 4}));