/* The following code example is taken from the book * "The C++ Standard Library - A Tutorial and Reference" * by Nicolai M. Josuttis, Addison-Wesley, 1999 * * (C) Copyright Nicolai M. Josuttis 1999. * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. */ #include /* class for the compose_f_gxy adapter */ template class compose_f_gxy_t : public std::binary_function { private: OP1 op1; // process: op1(op2(x,y)) OP2 op2; public: // constructor compose_f_gxy_t (const OP1& o1, const OP2& o2) : op1(o1), op2(o2) { } // function call typename OP1::result_type operator()(const typename OP2::first_argument_type& x, const typename OP2::second_argument_type& y) const { return op1(op2(x,y)); } }; /* convenience function for the compose_f_gxy adapter */ template inline compose_f_gxy_t compose_f_gxy (const OP1& o1, const OP2& o2) { return compose_f_gxy_t(o1,o2); }