参数绑定bind

来源:互联网 发布:钢结构算量用什么软件 编辑:程序博客网 时间:2024/05/07 00:40

bind函数 定义在头文件functional

当某算法只接受单一参数,而我们需要多个参数来解决问题时要用到参数绑定。
如:
假如我们想找到容器中string长度大于5的元素时定义一个比较函数:

bool check_size(const string &s, string::size_type sz){    return s.size() >= sz;}

但是find_if第三个参数只接受一元谓词 这时要用到 bind函数

auto newCallable = bind(callable, arg_list);

当调用newcallablebind将参数传给callable然后改调用callable

例子:

using std::placeholders::_1;auto check5 = bind(check_size, _1, 6);//参数列表中的_n代表占位check_size中的第n个参数string s = “hello”;bool = check5(s);   //会调用check_size(s, 5)

再调用find_if:

auto wc = find_if(word.begin(), word.end(), bind(check_size,_1, 5));//find_if将会调用 check_size(string, 5)

除此之外还可以用bind1stbind2nd 将某个值绑定到函数对象的第一个或者第二个参数上

//通过预定义函数对象求大于2的个数   greater<int>() 有2个参数 //将 2 绑定到了 greater<int>()的第二个参数上int num3 = count_if(v1.begin(), v1.end(), bind2nd(greater<int>(), 2 ) );cout << "num3:" << num3 << endl;
0 0