std::function与std::bind 函数指针
来源:互联网 发布:淘宝美工课程介绍 编辑:程序博客网 时间:2024/06/05 08:21
std::function与std::bind 函数指针
function模板类和bind模板函数,使用它们可以实现类似函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类 的非静态成员函数时。
std::function可以绑定到全局函数/类静态成员函数(类静态成员函数与全局函数没有区别),如果要绑定到类的非静态成员函数,则需要使用std::bind。
- #include <iostream>
- #include <functional>
- using namespace std;
- typedef std::function<void ()> fp;
- void g_fun()
- {
- cout<<"g_fun()"<<endl;
- }
- class A
- {
- public:
- static void A_fun_static()
- {
- cout<<"A_fun_static()"<<endl;
- }
- void A_fun()
- {
- cout<<"A_fun()"<<endl;
- }
- void A_fun_int(int i)
- {
- cout<<"A_fun_int() "<<i<<endl;
- }
- //非静态类成员,因为含有this指针,所以需要使用bind
- void init()
- {
- fp fp1=std::bind(&A::A_fun,this);
- fp1();
- }
- void init2()
- {
- typedef std::function<void (int)> fpi;
- //对于参数要使用占位符 std::placeholders::_1
- fpi f=std::bind(&A::A_fun_int,this,std::placeholders::_1);
- f(5);
- }
- };
- int main()
- {
- //绑定到全局函数
- fp f2=fp(&g_fun);
- f2();
- //绑定到类静态成员函数
- fp f1=fp(&A::A_fun_static);
- f1();
- A().init();
- A().init2();
- return 0;
- }
同时,std::bind绑定到虚函数时会表现出多态行为。
- #include <iostream>
- #include <functional>
- using namespace std;
- typedef std::function<void ()> fp;
- class A
- {
- public:
- virtual void f()
- {
- cout<<"A::f()"<<endl;
- }
- void init()
- {
- //std::bind可以表现出多态行为
- fp f=std::bind(&A::f,this);
- f();
- }
- };
- class B:public A
- {
- public:
- virtual void f()
- {
- cout<<"B::f()"<<endl;
- }
- };
- int main()
- {
- A* pa=new B;
- pa->init();
- return 0;
- }
0 0
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- std::function与std::bind 函数指针
- 【cocos2dx】std::function与std::bind 函数指针
- Ruby遍历文件夹
- Valid Parentheses
- 批处理自身%0的总结
- LeetCode 32 Longest Valid Parentheses 最大合法括号匹配长度计算 动态规划算法有待学习
- MFC的coredump文件以及调试
- std::function与std::bind 函数指针
- 【马马虎虎系列】Unity的attributes大集合(1)
- 2016年人人网笔试题
- 猴子分桃
- 将数组中的正负数就地归类
- 拓展的欧几里得算法
- 小白书之求无重复元素集合的子集
- java script5继承
- AngularJS进阶(三)HTML:让表单、文本框只读,不可编辑的方法