Объекты функций STL. Дополнительные композиционные адаптеры

   
На этом шаге мы перечислим дополнительные композиционные адаптеры.

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

   
Теоретически в библиотеке пригодились бы следующие композиционные адаптеры.

  • f(g(elem)). Общая форма унарной композиции - вложенные вызовы унарных предикатов, при которых результаты вызова
    предиката g() являются входными данными для предиката f(). Все выражение работает как унарный предикат.
  • f(g(elem1,elem2)). Два элемента elem1 и elem2 передаются в аргументах бинарного предиката g(),
    а результаты, как и в предыдущем случае, являются входными данными для унарного предиката f(). Все выражение работает
    как бинарный предикат.
  • f(g(elem),h(elem)). Элемент elem передается двум разным унарным предикатам g() и h(), а
    результаты обрабатываются бинарным предикатом f(). Все выражение работает как унарный предикат.
  • f(g(elem1),h(elem2)). В этой форме два элемента elem1 и elem2 передаются двум разным унарным предикатам
    g() и h(), а результаты обрабатываются бинарным предикатом f(). Все выражение работает как бинарный
    предикат.

   
К сожалению, эти композиционные адаптеры не были стандартизированы, поэтому для них не существуют стандартных имен. В
реализации STL от SGI были определены имена для двух из перечисленных адаптеров, однако сообщество
программистов еще не выбрало наиболее подходящие. В таблице 1 приведены имена, которые мы будем использовать далее.

Таблица 1. Возможные имена композиционных адаптеров

Функциональность В шагах В реализации STL от SGI
f(g(elem)) compose_f_gx compose1
f(g(elem1,elem2)) compose_f_gxy  
f(g(elem),h(elem)) compose_f_gx_hx compose2
f(g(elem1),h(elem2)) compose_f_gx_hy  

   
В архиве библиотек C++ Boost (http://www.boost.org) можно найти как имена,
которые должны использоваться в будущем, так и их полную реализацию. В следующих шагах описаны три наиболее часто использующиеся адаптера.

   
Со следующего шага мы будем рассматривать унарные композиционные адаптеры.



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

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