关于 std::bind
std::bind C++ 11 的一个新函数,返回值为一个函数对象,可以看作一个通用的函数适配器。它接受一个函数作为参数,并返回一个新的函数同时将一至多个参数绑定到返回的函数中。下文的内容包括如何使用bind 以及什么时候使用bind。
如何使用
假如我们已经有一个函数:
int add(int a, int b){
return a + b;
}
bind
将一个函数作为它的第一个参数,并将这个函数的参数作为自己的参数。在下面的代码中,newAdd
以add
作为第一个参数,并且使用两个占位符来表示自己接受的参数。注意:_1, _2
表示占位符,位于<functional>
中,std::placeholders::_1
;另外,由于普通函数做实参时会隐式转换成函数指针,因此&add
可以用 add
替代。
using namespace std::placeholders;
auto newAdd = bind(&add, _1, _2);
在下面的代码中,5和6分别会与_1
,_2
绑定,被add()
调用。因此 newAdd(5,6)
等价于 add(5, 6)
cout << newAdd(5, 6) << endl; //11
我们也可以交换占位符,下面的代码中newAdd(5,6)
等价于 add(6,5)
: