как использовать функторы binder и bind2nd? - PullRequest
1 голос
/ 21 сентября 2009

Как использовать binder2nd, bind2nd и bind1st? Конкретнее, когда их использовать и нужны ли они? Также я ищу несколько примеров.

Ответы [ 2 ]

5 голосов
/ 21 сентября 2009

Они никогда, строго говоря, не нужны , так как вы всегда можете определить свой собственный объект-функтор; но они очень удобны именно для того, чтобы избежать необходимости определять пользовательские функторы в простых случаях. Например, скажем, вы хотите посчитать элементы в 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)) 

без указания вспомогательного класса функторов! -)

1 голос
/ 21 сентября 2009

Связующие являются способом C ++ карри . Кстати, посмотрите Boost Bind библиотека

...