初始化列表的非变体版本效果很好:
std::map<int, double> a = {{1,0.1}};
但变体版本没有:
std::variant<std::map<int, double>, int> b = {{1,0.1}};
有没有办法使用初始化列表来初始化 b?如果不是,初始化它的最佳方法是什么?
答案 0 :(得分:5)
一种方法是更具体:
std::variant<std::map<int, double>, int> b = std::map<int, double>{{1,0.1}};
不理想,但编译器无法从 std::variant
中选择正确的 <brace-enclosed initializer list>
构造函数重载。因为相关的 std::variant
constructor 是如何定义的:
template< class T >
constexpr variant( T&& t ) noexcept(/* see below */);
T&& t
不可能匹配 <brace-enclosed initializer list>
,只能匹配特定类型的值。