Go to the documentation of this file.00001
00002
00003
00004 #ifndef UTILMM_FUNCTIONAL_BINARY_COMPOSE_HEADER
00005 # define UTILMM_FUNCTIONAL_BINARY_COMPOSE_HEADER
00006
00007 # include <functional>
00008
00009 #include "utilmm/functional/arg_traits.hh"
00010
00011 namespace utilmm {
00012
00034 template<class BinaryFun, class UnaryFun1, class UnaryFun2>
00035 struct binary_compose_2
00036 :public std::binary_function<typename UnaryFun1::argument_type,
00037 typename UnaryFun2::argument_type,
00038 typename BinaryFun::result_type> {
00039 private:
00040 BinaryFun bin_fn;
00041 UnaryFun1 fun_1;
00042 UnaryFun2 fun_2;
00043
00044 typedef typename
00045 arg_traits<typename UnaryFun1::argument_type>::type first_arg;
00046 typedef typename
00047 arg_traits<typename UnaryFun2::argument_type>::type second_arg;
00048
00049 public:
00064 binary_compose_2(BinaryFun const &bin, UnaryFun1 const &one,
00065 UnaryFun2 const &two)
00066 :bin_fn(bin), fun_1(one), fun_2(two) {}
00067
00077 typename BinaryFun::result_type operator()(first_arg a, second_arg b)
00078 const {
00079 return bin_fn(fun_1(a), fun_2(b));
00080 }
00081
00082 };
00083
00100 template<class Bin, class Fun1, class Fun2>
00101 binary_compose_2<Bin, Fun1, Fun2> compose2_2(Bin const &f, Fun1 const &a,
00102 Fun2 const &b) {
00103 return binary_compose_2<Bin, Fun1, Fun2>(f, a, b);
00104 }
00105
00106 }
00107
00108 #endif // UTILMM_FUNCTIONAL_BINARY_COMPOSE_HEADER
00109