我有一个在boost :: variant中调用构造函数的问题。 假设我有两个类“abc”和“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的构造函数?
答案 0 :(得分:1)
来自the manual(你一定错过了):
变体可以直接从任何可转换为的值构造 其中一个有界类型
和
同样,可以为变体分配任何可转换为其中一个的值 它的有界类型
所以:
def my_object = asd(3); // or `def my_object(asd(3));`
my_object = abc(4);
答案 1 :(得分:0)
变体是不一些乘法派生的自定义类型,而是定义了自己的构造函数。惯用的方法是只分配一种变体类型:
typedef boost::variant<abc,asd> def;
int main()
{
def my_object = abc(1);
my_object = abc(1, .4);
}
如果你想在没有复制初始化的情况下实际使用构造函数(尽管大多数编译器都会忽略副本),你可以写:
def my_object(abc(1,.4));