c++ - 有没有办法避免为 std::variant 类成员中的所有类型编写构造函数?
问题描述
我有一个struct
这样的:
struct A
{
int a;
std::variant<int, float, char> b;
A() = default;
};
我想添加一个构造函数,它将同时初始化a
和b
。看来我将不得不为b
likeA::A(int a1, int b1)
等中的所有类型编写一个构造函数A::A(int a1, float b1)
。
有没有办法避免这种情况?
解决方案
您可以为您的类创建一个模板化构造函数,并且充其量应用完美转发将其参数传递给variant
成员的构造函数:
template <typename T>
A::A(int i, T&& t) : a(i), b(std::forward<T>(t)) { }
然后,您可以编写,例如:
A obj1(1, -7.4f); // float variant member
A obj2(2, 7); // int variant member
A obj3(3, 'c'); // char variant member
不会涉及不必要的移动/复制/临时。
推荐阅读
- hugo - 如何在 HUGO 中获取 {{.GitInfo}}?
- python - 如何通过机器学习识别句子中的某些单词?
- vb.net - 如何在发送之前在我的 pdf 中设置密码?
- javascript - 三星互联网浏览器上的全屏高度不一致
- java - 将 assets 文件夹中的自定义 gif 加载到 recyclerview android
- java - 如何使用 jhipster 在 Kafka 集群上设置多个代理
- python - 如何使用 json 文件中的“时间戳”将 DataFrame 设置为从 X 日到 Y 日,而不是从 X 年到 Y 年?
- android - 如何在列表视图中将搜索结果显示为 SearchView 的下拉列表?
- python-3.x - 在 tkinter GUI 中更新温度读数
- html - 如何固定表头的位置并仅滚动表体