简体   繁体   English

如何使用初始化列表来初始化 std::variant?

[英]How to use initializer list to initialize std::variant?

The non-variant version of initializer list works good:初始化列表的非变体版本效果很好:

std::map<int, double> a = {{1,0.1}};

But the variant version doesn't:但是变体版本没有:

std::variant<std::map<int, double>, int> b = {{1,0.1}};

Is there a way to initialize b using initializer list?有没有办法使用初始化列表初始化 b ? If not, what is the best way to initialize it?如果没有,初始化它的最佳方法是什么?

One way is to be more specific:一种方法是更具体:

std::variant<std::map<int, double>, int> b = std::map<int, double>{{1,0.1}};

Not ideal, but the compiler cannot choose the right overload of std::variant constructor from a <brace-enclosed initializer list> .不理想,但编译器无法从<brace-enclosed initializer list>中选择正确的std::variant构造函数重载。 Because of how the relevantstd::variant constructor is defined:因为相关的std::variant构造函数是如何定义的:

template< class T >
constexpr variant( T&& t ) noexcept(/* see below */);

T&& t cannot possibly match a <brace-enclosed initializer list> , only a value of a specific type. T&& t不可能匹配<brace-enclosed initializer list> ,只能匹配特定类型的值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 std::initializer_list 初始化结构? - How do I use std::initializer_list to initialize a struct? std::optional 如何从初始值设定项列表中构造 std::variant ? - How does std::optional construct std::variant in place from initializer list? 在类的成员初始化器列表中初始化std :: tuple - Initialize std::tuple in member initializer list of a class 在类的初始化器列表中初始化std :: vector - Initialize std::vector in class's initializer list 用std :: initializer_list初始化矩阵 - Initialize a matrix with std::initializer_list 使用初始化列表初始化类中的std :: ofstream - Initialize a std::ofstream in a class using initializer list 如何使用initializer_list列表初始化具有自定义类的地图 - How to use initializer_list list to initialize a map with customized class 如何在构造函数初始值设定项列表中初始化std :: unique_ptr对象的类成员std :: vector? - How do I initialize a class member `std::vector` of `std::unique_ptr` object in the constructor initializer list? 如何初始化 std::vector<std::time_t> 在构造函数初始值设定项列表中有 n 个元素</std::time_t> - How to initialize std::vector<std::time_t> with n elements in constructor initializer list 如何在类的初始化列表中初始化 std::array 而不对数组的大小进行硬编码 - How to initialize an std::array in the initializer list of a class without hardcoding the array's size
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM