template<class Ufn, class Bfn>
class void_binary_compose : public std::binary_function
<
Bfn::first_argument_type,
Bfn::second_argument_type, void
> {
public:
explicit void_binary_compose(Ufn Fn1, Bfn Fn2)
: m_Fn1(Fn1), m_Fn2(Fn2) {}
void operator()
(
Bfn::first_argument_type arg1,
Bfn::second_argument_type arg2
)
{ m_Fn1(m_Fn2(arg1, arg2)); }
private:
Ufn m_Fn1;
Bfn m_Fn2;
};
template<class Ufn, class Bfn>
void_binary_compose<Ufn, Bfn> void_compose2(Ufn Fn1, Bfn Fn2)
{ return void_binary_compose<Ufn, Bfn>(Fn1, Fn2); }