私は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 は演算子 *= を定義する必要があるため、これは私を困惑させます。