std::function与std::bind 函数指针
来源:互联网 发布:sql update where条件 编辑:程序博客网 时间:2024/06/05 07:29
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 函数指针
- C语言错误
- android 真机 访问本地web服务器 localhost login 注意事项
- TCP与UDP的区别
- poj 3349
- 在Ubuntu上搭建svn服务器
- std::function与std::bind 函数指针
- Cocos Code IDE扩展代码提示
- Linux Centos7 Apache 访问 You don't have permission to access / on this server.
- Android---Animations
- 最长回文字符串(manacher算法)
- Struts2与ajax整合之缺点
- WM_COPYDATA实现进程间通信
- linux 常用命令
- HTTP 1.1与HTTP 1.0的比较