На этом шаге мы перечислим дополнительные композиционные адаптеры.
Возможность объединения объектов функций играет важную роль в построении программного кода из готовых компонентов. Композиция позволяет конструировать очень сложные объекты функций из более простых частей. Конечно, было бы очень полезно, чтобы практически любое функциональное отношение представлялось в виде комбинации объектов функций. К сожалению, набор адаптеров в стандартной библиотеке C++ недостаточно широк. Например, не существует адаптера, который бы позволял объединить две унарные операции для формулировки критерия вида "одно и другое".
Теоретически в библиотеке пригодились бы следующие композиционные адаптеры.
К сожалению, эти композиционные адаптеры не были стандартизированы, поэтому для них не существуют стандартных имен. В реализации STL от SGI были определены имена для двух из перечисленных адаптеров, однако сообщество программистов еще не выбрало наиболее подходящие. В таблице 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) можно найти как имена, которые должны использоваться в будущем, так и их полную реализацию. В следующих шагах описаны три наиболее часто использующиеся адаптера.
Со следующего шага мы будем рассматривать унарные композиционные адаптеры.