std::bind
包含在标准库头文件#include<functional>
中,它是一种函数适配器,接收一个可调用对象,生成一个新的可调用对象来适配原对象的参数列表。
使用格式
std::bind
使用的一般形式:
1 | auto new_fun = bind(fun, arg_list); |
其中fun
是一个函数,arg_list
是用逗号隔开的参数列表。调用new_fun()
相当于调用fun(arg_list)
。
常见用法
用法一:改变参数的个数
头文件:
1 |
|
现在定义一个函数,接收一个数组array
,数组长度n
和某个数num
,它将实现打印数组中大于num
的功能
1 | auto fun = [](int *array, int n, int num){ |
利用std::bind
函数将原来函数调用所需要的参数固定为2个,实现过程如下:
1 | int array[] = { 1, 3, 5, 7, 9 }; |
上面代码中_1,_2是占位符,定义于命名空间placeholders
中,_1是nnew_fun
的第一个参数,_2是new_fun
的第二个参数,以此类推。在本例中,fun()
的调用需要传递三个参数,而用bind()
进行绑定后只需两个参数了,因为第三个参数在绑定时被固定了下来。减少函数参数的调用,这是bind
最常见的用法。
用法二:更改参数的顺序
bind
的另一个常见的用法是更改参数的调用顺序,如
1 | int fun(int a, int b); |
此时,调用new_fun(1, 2)
相当于调用fun(2, 1)
。