c++ - 不为 emplace() 定义构造函数的解决方法
问题描述
我们从 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 的变体中,但是我们可以在不修改容器源的情况下做一些事情吗?
编辑:这个问题:为什么 emplace_back() 不使用统一初始化?是相关的,但不提供解决方法。
解决方案
您至少有一个可用的隐式构造函数。
std::vector<S> v;
v.emplace_back(S{2, 3.0});
(emplace_back
并且push_back
在这种情况下可以互换。)
推荐阅读
- microservices - 将不带工作台的 DRL 资源添加到 Kieserver
- prometheus - 是否可以在 Prometheus 中为 X 轴提供自定义时间戳
- java - 从 SQL 查询返回结果时 JDBC 中的异常 - 在开始或结果集之前
- python - 将类 JSON 数据导入 Python
- popup - 防止用户在 MESSAGE 类型 I 上按 Enter 键?
- typescript - 对于在函数中输入的参数,条件泛型的类型如何?
- npm - Node Sass 与苹果 m1、Big Sur 和 arm64
- python - 使用 Pandas 将时间序列转换为开始和结束日期
- javascript - 无法使用手动路由链接访问反应网站
- python - Python 速成课程 Space Invader 问题