Adapter implementation for converting binary functor to one dollar
template<class BinaryFunctor>class MyBinaryToUnaryFunctorAdapter : public std::unary_function<typename BinaryFunctor::first_argument_type, typename BinaryFunctor::result_type>{public:typedef std::binary_function<typename BinaryFunctor::first_argument_type, typename BinaryFunctor::second_argument_type, typename BinaryFunctor::result_type> BinaryFunctorBase;typedef typename BinaryFunctorBase::first_argument_type FirstArgumentType;typedef typename BinaryFunctorBase::second_argument_type SecondArgumentType;typedef typename BinaryFunctorBase::result_type ResultType;MyBinaryToUnaryFunctorAdapter(const BinaryFunctor &fn, const SecondArgumentType &rhs) : mFunctor(fn), mRightHandSide(rhs){}ResultType operator () (FirstArgumentType &lhs) const{return mFunctor(lhs, mRightHandSide);}private:BinaryFunctor mFunctor;SecondArgumentType mRightHandSide;};template<class BinaryFunctor, class SecondArgumentType>MyBinaryToUnaryFunctorAdapter<BinaryFunctor> MyBind2nd(const BinaryFunctor &bf, const SecondArgumentType &rhs){return MyBinaryToUnaryFunctorAdapter<BinaryFunctor> (bf, rhs);}