Шаг 247.
Библиотека STL.
Объекты функций STL. Функциональные адаптеры для обычных функций

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

    Функциональный адаптер ptr_fun позволяет использовать обычные функции с другими функциональными адаптерами (таблица 1).

Таблица 1. Функциональные адаптеры для обычных функций
Выражение Описание
ptr_fun(op) *op(param)
*op(param1,param2)

    Предположим, имеется глобальная функция, которая проверяет некоторое условие для передаваемого параметра:

  bool check(int elem);

    Поиск первого элемента, для которого проверка завершается неудачей, производится следующей командой:

  pos = find_if (coll.begin(), coll.end(),	// Интервал
                 not1(ptr_fun(check)));         // Критерий поиска

    Применить конструкцию not1(check) нельзя, поскольку not1() использует специальные типы, предоставляемые объектами функций.

    Вторая форма используется в ситуации, когда глобальная функция вызывается с двумя параметрами, а вам, например, она нужна как унарная функция:

  // Поиск первой непустой строки
  pos = find_if (coll.begin(), coll.end(),	// Интервал
                 bind2nd(ptr_fun(strcmp),""));  // Критерий поиска

    В этом фрагменте функция strcmp() языка С сравнивает каждый элемент с пустой строкой языка С. Если строки совпадают, функция strcmp() возвращает 0 (эквивалент false). Таким образом, данный вызов find_if() возвращает позицию первого элемента, отличного от пустой строки.

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




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