1

我正在尝试学习 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 应该定义运算符 *=。

4

1 回答 1

4

您需要有一个单独operator()的 forstd::string&因为没有*=为 定义运算符std::string

此外,您的操作员必须被标记const,因为您将临时访问者实例传递给apply_visitor.

于 2012-09-24T13:04:20.130 回答