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

how to call the particular constructor of boost::variant

本文关键字:variant 构造函数 boost 何调用 调用      更新时间:2023-10-16

我在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));