1

bind2nd、bind2nd、bind1stの使い方は?より具体的には、いつそれらを使用するのか、そしてそれらは必要ですか?また、私はいくつかの例を探しています。

4

2 に答える 2

5

厳密に言えば、これらは決して必要ではありません。独自のカスタムファンクターオブジェクトをいつでも定義できるからです。しかし、単純なケースでカスタムファンクターを定義する必要をなくすために、これらは非常に便利です。たとえば、であるアイテムをカウントしたいとします。もちろんコードを書くことができます...:std::vector<int>> 10

std::count_if(v.begin(), v.end(), gt10()) 

定義後:

class gt10: std::unary_function<int, bool>
{
public:
    result_type operator()(argument_type i)
    {
        return (result_type)(i > 10);
    }
};

ただし、代わりに、コーディングがどれほど便利かを検討してください。

std::count_if(v.begin(), v.end(), std::bind1st(std::less<int>(), 10)) 

補助ファンクタークラスを定義する必要はありません!-)

于 2009-09-21T16:18:30.623 に答える
1

バインダーは、カリー化を行うC++の方法です。ところで、 BoostBindライブラリをチェックしてください

于 2009-09-21T18:00:41.620 に答える