c++ - 不为 emplace() 定义构造函数的解决方法

标签 c++ c++11

<分区>

自 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?相关但不提供解决方法。

最佳答案

您至少有一个隐式构造函数可用。

std::vector<S> v;
v.emplace_back(S{2, 3.0});

(emplace_backpush_back 在此上下文中可以互换。)

关于c++ - 不为 emplace() 定义构造函数的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51848574/

相关文章:

c++ - 派生类中的析构函数标记为 noexcept(false)

c++ - std::async 的奇怪行为

c++ - boost std unique_ptr 的 STL 集合的序列化

c++ - const 引用转换为非常量后的行为

c++ - 展开两个参数包

C++ 定义由一组固定整数组成的类型的最佳方法

c++ - ld: 未找到体系结构 x86_64 行::AddColumn 的符号

c++ - 将非标准引擎传递给 uniform_int_distribution 是否有效?

c++ - 按参数中的 vector 类型重载函数

c++ - 不调用自定义分配器方法