Зачем использовать функторы над функциями?

Сравните

double average = CalculateAverage(values.begin(), values.end());

с

double average = std::for_each(values.begin(), values.end(), CalculateAverage());

Каковы преимущества использования функтора над функцией? Разве первый не легче читать (даже до добавления реализации)?

Предположим, что функтор определен следующим образом:

class CalculateAverage
{
private:
   std::size_t num;
   double sum;
public:

   CalculateAverage() : num (0) , sum (0)
   {
   }

   void operator () (double elem) 
   {
      num++; 
      sum += elem;
   }

   operator double() const
   {
       return sum / num;
   }
};
54
задан DanDan 23 June 2011 в 03:50
поделиться