3

私は数日前にブーストライブラリを使い始めたので、私の質問はおそらく些細なことです。2つの同じタイプのバリアントをstatic_visitorと比較したいと思います。以下を試しましたが、コンパイルしたくありません。

struct compare:public boost::static_visitor<bool>
{
    bool operator()(int& a, int& b) const
    {
        return a<b;
    }

    bool operator()(double& a, double& b) const
    {
        return a<b;
    }
};
int main()
{
    boost::variant<double, int > v1, v2;
    v1 = 3.14;
    v2 = 5.25;
    compare vis;
    bool b = boost::apply_visitor(vis, v1,v2);
    cout<<b;
    return 0;
}

助けや提案をありがとう!

4

1 に答える 1

1

llonesmiz がコメントで答えを教えてくれましたが、消えてしまいました。誰かが同様の問題を抱えている場合は、それが役立つ場合があります。異なる演算子で int と double のすべての組み合わせを処理する必要がありました。これを実装する最も簡単な方法は、次のようにテンプレートを使用することでした。

struct my_less : boost::static_visitor<bool>
{
   template<typename T, typename U>
   bool operator()(T a, U b) const
   {
       return a<b;
   }   

};
于 2013-01-17T04:15:19.110 に答える