STL的一、二元Functor与适配器


二元Functor转换到一元的适配器实现

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);
}


你可能感兴趣的:(STL的一、二元Functor与适配器)