如何调用boost::variant的特定构造函数
how to call the particular constructor of boost::variant
我在boost::variant中有一个调用构造函数的问题。假设我有两个类"abc"answers"asd"我有一个类似于-
的对象声明class abc
{
int var;
float var2;
public: abc(int a)
{
var = a;
}
public: abc(inta, float b)
:var(a), var2(b)
{}
};
class asd
{
int var;
public: asd(int a)
{
var = a;
}
};
typedef boost::variant<abc,asd> def;
int main()
{
def my_object;
}
我的问题是如何调用对象my_object的构造函数?
从手册(你一定错过了):
可以直接从可转换为的任何值构造一个变量它的一个有界类型
:
同样,一个变量可以被赋值为可转换为的任意值其有界类型
:
def my_object = asd(3); // or `def my_object(asd(3));`
my_object = abc(4);
变体是不是某个乘法派生的自定义类型,而是定义了自己的构造函数。惯用的方法是只分配一个变体类型:
typedef boost::variant<abc,asd> def;
int main()
{
def my_object = abc(1);
my_object = abc(1, .4);
}
如果你想在没有复制初始化的情况下使用构造函数(尽管大多数编译器会忽略复制),你可以这样写:
def my_object(abc(1,.4));
相关文章:
- "error: no matching function for call to"构造函数错误
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 选择要调用的构造函数
- 如何委托派生类使用其父构造函数?
- 构造函数正在调用一个使用当前类类型的函数
- 没有用于初始化C++中的变量模板的匹配构造函数
- 初始化具有非默认构造函数的std::数组项的更好方法
- 当从函数参数中的临时值调用复制构造函数时
- 在 boost::variant 中类 holden 的复制构造函数存在问题
- 有没有办法避免为 std::variant 类成员中的所有类型编写构造函数?
- 在构造函数初始化列表中使用 std::variant
- 为什么Boost Variant使用模板构造函数而不是Boost::beast::websocket::stream的移
- "非静态数据成员之前需要构造函数" - 我是否使用"boost::variant"
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- Boost.Spirit with Boost.Variant 和 C++11:期待一个零参数构造函数
- 如何调用boost::variant的特定构造函数
- 关于 std::variant 中三个构造函数的问题