使用boost :: variant

时间:2015-08-02 19:02:57

标签: c++ pointers boost boost-variant

我定义了我自己的variant类型:

typedef variant<myobj **, ... other types> VariantData;

我的一个类方法将此数据类型作为参数获取,并尝试执行以下操作:

void MyMethod(VariantData var){
    //method body
    if(some_cond){ // if true, then it implies that var is of type
                   // myobj **
        do_something(*var); // however, I'm unable to dereference it
    }
    // ... ther unnecessary stuff
}

因此,当我编译程序时,收到此错误消息:

error: no match for 'operator*' (operand type is 'VariantData ....'

我不知道如何修复此错误。 PS。总的来说,代码运行良好 - 如果我注释掉这部分与解除引用有关,那么一切都运行顺畅。

1 个答案:

答案 0 :(得分:1)

错误消息非常明显:您不能取消引用boost::variant,它没有这样的语义。您应该首先提取值,即指针,然后取消引用它。

要提取依赖于运行时逻辑的值,只需调用get():

//method body
if(some_cond){ // if true, then it implies that var is of type myobj **
    do_something(*get<myobj **>(var));
}

但请注意,如果运行时逻辑失败(例如由于错误),get()将抛出bad_get异常。