[英]How to direct initialize a C++ variant with one of its non-default option?
考虑以下:
class Foo {
[...]
public:
Foo(int);
}
class Bar {
[...]
public:
Bar(int);
}
using MyVariant = std::variant<Foo,Bar>;
如何将MyVariant
的实例直接初始化(即不涉及复制且不涉及Foo
构建)作为Bar
?
将std::in_place_type_t<Bar>
类型的 a 标记作为第一个构造函数参数传递:
struct Foo
{
Foo(int value)
{
std::cout << "Foo(" << value << ")\n";
}
};
struct Bar
{
Bar(int value)
{
std::cout << "Bar(" << value << ")\n";
}
Bar(Bar const&)
{
std::cout << "Bar(Bar const&)\n";
}
Bar& operator=(Bar const&)
{
std::cout << "Bar& operator=(Bar const&)\n";
}
};
int main() {
std::variant<Foo, Bar> var(std::in_place_type_t<Bar>{}, 1);
}
如果您更喜欢在std::variant
的模板参数列表中传递类型的 position,则std::in_place_index_t
将是替代的第一个参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.