// 如果参数为const int&类型,就会挂掉。据说是编译器实现的时候忽略了?
// 具体分析错误应该是这样: std::ptr_fun会构造出一个派生于binary_function的对象,
// 传递给他的模板参数就是函数参数类型,如果传递&类型,会导致调用真是函数时候
// argument_type&变成argument_type&&引发编译错误,除非能在std::prt_fun中推导出
// Val&参数类型中的Val类型作为模板参数传递下去
bool Cmp(const int& iLeft, const int& iRight)
{
return true;
}
// std::binary_functiond在传递函数参数的时候已经分别生命了const TVal& 和 TVal&两个版本,
// 所以在实例化的时候不能传递const TVal&上去,会造成编译错误
class Functor_Cmp : public std::binary_function<int, int, bool>
{
public:
bool operator () (const int& iLeft, const int& iRight) const
{
return true;
}
};
void Test_Bind2end()
{
vector<int> vInt(9);
// 注意functor 和function ptr的区别
std::count_if(vInt.begin(), vInt.end(), std::bind2nd(std::ptr_fun(&Cmp), 1));
std::count_if(vInt.begin(), vInt.end(), std::bind2nd(Functor_Cmp(), 1));
}