Сравните
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;
}
};