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