c++ - 如何使用初始化列表来初始化 std::variant?
问题描述
初始化列表的非变体版本效果很好:
std::map<int, double> a = {{1,0.1}};
但是变体版本没有:
std::variant<std::map<int, double>, int> b = {{1,0.1}};
有没有办法使用初始化列表初始化 b ?如果没有,初始化它的最佳方法是什么?
解决方案
一种方法是更具体:
std::variant<std::map<int, double>, int> b = std::map<int, double>{{1,0.1}};
不理想,但编译器无法std::variant
从 a 中选择正确的构造函数重载<brace-enclosed initializer list>
。由于相关std::variant
构造函数的定义方式:
template< class T >
constexpr variant( T&& t ) noexcept(/* see below */);
T&& t
不可能匹配 a <brace-enclosed initializer list>
,只能匹配特定类型的值。
推荐阅读
- arrays - for ... in 循环是否遍历序列的副本?
- php - Sylius - Shop Api - 当 shop API 运行时发生错误找不到模板“”
- python - 将存储在元组中的坐标字符串转换为列表
- azure - 用于监视 Azure VM 的逻辑应用程序未发送预期的电子邮件
- php - 未知数据库类型枚举请求学说
- c# - 删除和创建具有相同名称的新/覆盖文件 c# .NET
- oracle - 为什么更改通知不支持以下查询?
- angular - Firebase CommonJS 或 AMD 依赖项可能导致优化救助
- c++ - 如何正确关闭 boost 线程
- ubuntu-18.04 - 有没有办法让本地和远程文件保持同步?(本地和远程机器都是ubuntu)