从C++11开始,我们进行了聚合初始化:
struct S {
int count;
double value;
};
S s{2, 3.0};
但为了完成这项工作:
vector<S> v;
v.emplace_back(2, 3.0);
我们需要无缘无故地手动编写一个构造函数:
struct S {
int count;
double value;
S(int count, double value): count(count), value(value) {}
};
我们还需要这个构造器才能让optional(in_place, ...)
和variant(in_place_type<>, ...)
工作。
对于不手动编写此构造函数,有什么解决方法吗?
它不会添加任何信息,只是重复已经存在的内容,两次。此外,编译器能够自己编写它,就像它为聚合初始化做的那样。
我能够添加新的构造函数到Egg的变体中,这允许这样做,但是我们可以在不修改容器的源代码的情况下做一些事情吗?
编辑:这个问题:Why doesn't emplace_back() use uniform initialization?是相关的,但不提供解决方法。
发布于 2018-08-15 04:32:34
至少有一个隐式构造函数可用。
std::vector<S> v;
v.emplace_back(S{2, 3.0});
(在这种情况下,emplace_back
和push_back
是可以互换的。)
https://stackoverflow.com/questions/51848574
复制相似问题