首页 > 代码库 > std::function,std::bind复习

std::function,std::bind复习

#include <iostream>#include <functional>
//std::bind返回函数对象void fun1(int a, int b){ std::cout << a << b << std::endl;}using namespace std::placeholders;class A{public: void fun2(int a, int b) { std::cout << a << b << std::endl; }};int main(){ //第一种用法,直接绑定实参 std::bind(fun1, 1, 2)();//调用时把1,2的拷贝作为实参传递给fun1,bind中绑定的参数必须与fun1调用的参数个数相同,参数将会传递给fun1作为入参 //占位符_1的用法,在函数调用时才接受正真的参数 std::bind(fun1, _2, _1)(1, 2);//占位符的名字表示在调用式中顺序,这个表示fun1(2, 1) //绑定成员函数 A a; std::bind(&A::fun2, a, _1, _2)(3, 4);//需要传递类似this指针的东西让这个函数对象调用&必须加 //functon用法,这个最多的用法可以存储bind返回的结果,在以后再需要的时候回调,是一种回调机制 std::function<void(int, int)> func;//function可以存储函数指针对象,之前以为只能存储std::bind func = fun1; func(5, 6); //function调用成员函数 //1.在function中写类名称 std::function<void(A&, int, int)> fun1;//可以赋值int,int返回为void的成员函数 fun1 = std::bind(&A::fun2, _1, _2, _3); fun1(a, 8, 9); //2.在bind里面写类实例,这种方式比较多 std::function<void(int, int)>fun2; fun2 = std::bind(&A::fun2, a, _1, _2); fun2(9, 10); getchar(); return 0;}