// fo/compose22.hpp #include /* Класс композиционнного адаптера compose_f_gx_hy */ template class compose_f_gx_hy_t : public std::binary_function { private: OP1 op1; // Вычисление: op1(op2(x),op3(y)) OP2 op2; OP3 op3; public: // Конструктор compose_f_gx_hy_t (const OP1& o1, const OP2& o2, const OP3& o3) : op1(o1), op2(o2), op3(o3) { } // Вызов функции typename OP1::result_type operator()(const typename OP2::argument_type& x, const typename OP3::argument_type& y) const { return op1(op2(x),op3(y)); } }; /* Вспомогательная функция для композиционного адаптера compose_f_gx_hy */ template inline compose_f_gx_hy_t compose_f_gx_hy (const OP1& o1, const OP2& o2, const OP3& o3) { return compose_f_gx_hy_t(o1,o2,o3); }