Объекты функций 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() возвращает позицию первого элемента, отличного от пустой строки.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий