首页 > 代码库 > 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;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。