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()の forが必要です。std::string&*=std::string

さらにconst、一時的な訪問者インスタンスを に渡すため、オペレーターをマークする必要がありますapply_visitor

于 2012-09-24T13:04:20.130 に答える