如何调用boost :: variant的特定构造函数

时间:2011-11-03 12:12:35

标签: c++ boost

我有一个在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的构造函数?

2 个答案:

答案 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));