假设我有以下代码:
#include <vector>
struct Foo
{
int tag = 0;
std::function<void ()> code;
};
int main()
{
std::vector<Foo> v;
}
现在我想向Foo
具有特定内容的向量添加一个新项目,tag
而code
无需明确创建临时对象。这意味着我必须添加一个构造函数Foo
:
struct Foo
{
inline Foo(int t, std::function<void ()> c): tag(t), code(c) {}
int tag = 0;
std::function<void ()> code;
};
现在我可以使用emplace_back
:
v.emplace_back(0, [](){});
但是当我不得不再次这样做——第 100 次——使用新创建的结构时,我想:我不能使用大括号初始值设定项吗?像这样:
#include <vector>
struct Foo
{
int tag = 0;
std::function<void ()> code;
};
int main()
{
std::vector<Foo> v;
v.push_back(Foo{ 0, [](){} });
}
这给了我一个编译错误(无法从'initializer-list'转换为'Foo'),但我希望这可以完成,我只是语法错误。