std::bind与std::function详解
std::bind
1. 定义
1 | bind(F f, T1 t1, T2 t2, ..., TN tN); |
具体为:
1 | bind (&要调用的函数, &对象, &要调用的函数1, 要调用的函数的参数2,...,_1(bind函数的参数1),_2(bind函数的参数2)...) |
2. bind使用形式
(1)bind(&f)() 假设f是一个全局函数,绑定全局函数并调用;
(2)bind(&A::f, A())() 假设A是一个构造函数为空的类,这个形式绑定了类的成员函数,故第二个参数需要传入一个成员(成员静态函数除外);
(3)bind(&A::f, _1)(new A()) 同上,效果是一样的,但是使用了占位符,使得没有固定的对象,推荐。
注意: 使用的时候一定要注意指向的是没有this指针的函数(全局函数或静态成员函数),还是有this指针的函数。后面一种必须要用bind()函数,而且要多一个参数,因为静态成员函数与非静态成员函数的参数表不一样,原型相同的非静态函数比静态成员函数多一个参数,即第一个参数this指针,指向所属的对象,任何非静态成员函数的第一个参数都是this指针。
3. 示例
1. 保存自由函数
1 | void printA(int a) |
2. 保存lambda表达式
1 | std::function<void()> func_1 = [](){cout << "hello world" << endl;} |
3. 保存成员函数
1 | struct Foo { |
在实际使用中都用 auto
关键字来代替 std::function...
这一长串。
关于std::bind的用法:
通过如下例子理解:
1 |
|