标准库bind()函数

《C++ primer》10.3.4章节

 bind()函数的作用是绑定一个函数

void debug(QString str)
{
    qDebug()<

这里newCall绑定了debug(),调用newCall()就会调用debug(), std::placeholders::_1为传给debug()的第一个参数,_2、_3以此类推。

重载函数:

void debug(QString str)
{
    qDebug()<
    auto newCall01 = std::bind(static_cast(& debug),std::placeholders::_1,std::placeholders::_2);
    newCall01("哈哈","呵呵");

    auto newCall02 = std::bind(static_cast(& debug),std::placeholders::_1);
    newCall02("嘿嘿嘿");

标准库bind()函数_第1张图片

标准库bind()函数_第2张图片

绑定时固定第二个参数的值。

bind()可以用于处理传给泛型算法的函数。

泛型算法:按条件查找元素算法find_if()

泛型算法find_if()可以传入一个含有一个参数的函数作为查找条件,如果是这样:

bool findValue(const int & value, const int &rangeMin,const int & rangeMax)
{
    if(value > rangeMin && value < rangeMax)
        return true;
    else
        return false;
}

直接使用这个有3个参数的函数作为查找的条件是不行的,这时候就用到了bind()。

bool findValue(const int & value, const int &rangeMin,const int & rangeMax)
{
    if(value > rangeMin && value < rangeMax)
        return true;
    else
        return false;
}

int main(int argc, char *argv[])
{
    QVector list;
    for (int i = 1;i < 10;++i)
    {
        list << i;
    }
    auto findIfResult = std::find_if(list.begin(),list.end(),std::bind(findValue,std::placeholders::_1,7,9));
    qDebug()<<*findIfResult;
}

标准库bind()函数_第3张图片

你可能感兴趣的:(C++日常)