有关使用boost :: variant重新加载运算符的编译错误

时间:2012-09-24 12:59:37

标签: c++ boost boost-variant

我正在尝试学习boost.variant。但是,我从书中复制的代码不会通过编译:

class var_print : public boost::static_visitor<void>    
{
public:
    template<typename T>    
    void operator()(T &i) {  
        i *= 2;   
        cout<<i<<endl;  
    }
};

以下是我尝试使用它的方法。

    typedef boost::variant<int,double,string> var_t;
    var_t v(1); //v->int 
    boost::apply_visitor(var_print(),v);

编译器生成以下错误:

错误:'i * = 2'

中的'operator * ='不匹配

这让我很困惑,因为模板函数会在调用时确定参数的类型,int应该定义运算符* =。

1 个答案:

答案 0 :(得分:4)

您需要为operator()单独std::string&,因为*=没有定义任何运算符std::string

此外,由于您要将临时访问者实例传递给const,因此必须将您的运营商标记为apply_visitor