《C++ primer》10.3.4章节
bind()函数的作用是绑定一个函数
void debug(QString str)
{
qDebug()<<str;
}
auto newCall = std::bind(debug,std::placeholders::_1);
newCall("哈哈");
这里newCall绑定了debug(),调用newCall()就会调用debug(), std::placeholders::_1为传给debug()的第一个参数,_2、_3以此类推。
重载函数:
void debug(QString str)
{
qDebug()<<str;
}
void debug(QString str1,QString str2)
{
qDebug()<<str1<<str2;
}
auto newCall01 = std::bind(static_cast<void(*)(QString,QString)>(& debug),std::placeholders::_1,std::placeholders::_2);
newCall01("哈哈","呵呵");
auto newCall02 = std::bind(static_cast<void(*)(QString)>(& debug),std::placeholders::_1);
newCall02("嘿嘿嘿");
绑定时固定第二个参数的值。
bind()可以用于处理传给泛型算法的函数。
泛型算法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<int> 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;
}