std::bind2nd简单理解

std::bind2nd简单理解

// 如果参数为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));
}

你可能感兴趣的:(std::bind2nd简单理解)