Шаг 238.
Библиотека STL.
Объекты функций STL. Концепция объектов функций

    На этом шаге мы рассмотрим общую концепцию объектов функций.

    Начиная с этого шага мы будем знакомиться с объектами функций, или функторами. Мы рассматрим все стандартные объекты функций и функциональные адаптеры, познакомимся с концепцией функциональной композиции и принципами написания пользовательских объектов функций.

Концепция объектов функций

    Объектом функции, или функтором, называется объект, для которого определен оператор (). Так, в следующем фрагменте выражение fo() означает не вызов функции fo(), а вызов оператора () объекта функции fo:

FunctionObjectType fo;
.    .    .    .
fo(...);

    На первый взгляд кажется, что объект функции - это самая обычная функция, зачем-то записанная более сложным способом. В обычной функции все необходимые команды включаются в тело функции:

void fo() { 
  команды 
}

    В случае объекта функции команды включаются в тело оператора () класса объекта функции:

class FunctionObjectType { 
  public:
    void operator() () { 
      команды
    }
}; 

    Действительно, такое определение более сложно, однако у него есть три важных преимущества.

    На 115 шаге эти преимущества описаны более подробно, а пример из 116 шага показывает, что объект функции "умнее" обычной функции.

    В следующих шагах приводятся два примера работы с объектами функций. В первом примере используется тот факт, что каждый объект функции обычно обладает собственным типом. Второй пример показывает, как задействовать состояние объекта функции, а также демонстрирует одно интересное свойство алгоритма for_each().

    На следующем шаге мы рассмотрим объект функции в качестве критерия сортировки.




Предыдущий шаг Содержание Следующий шаг