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