欢迎使用CSDN-markdown编辑器
来源:互联网 发布:登陆淘宝账户 编辑:程序博客网 时间:2024/05/19 03:22
C++类成员函数作为回调函数
已有甚多开发者为之大做文章。大为“你使用静态函数就行了”“WOC想用类成员回调就TM别用C++”罢了。
首先,使用静态函数之方法需传递this指针,故此非真实之回调。回调者必先知this对象。
其次,强制转换( 例如void (*fp)() (a.Destory); )亦不可。因为类成员函数暗藏一this指针。
C++11 者新加入一”bind”函数,可根据指定调用方式生成新可调用物件。使用方法如下。
auto f=bind(可调用物件,参数1,2,3,...);
不知各位可有C++ primer一书。书中有云——成员函数之this指针于bind中即可为第一参数
故可以此:
#include <iostream>#include <memory>#include <functional>using namespace std;using namespace std::placeholders;class GameObject{public: function<void()> OC_CB=nullptr; void Destory(){ cout<<"Destory"<<endl; } void Create(){ cout<<"Creating..."<<endl; if(OC_CB!=nullptr){ OC_CB(); } }};int main(){ GameObject a; GameObject b; auto f=bind(&GameObject::Destory,_1); f(&a);}
即获得有一参数之函数。其参数,即为this。
再优化main:
int main(){ cout << "Hello world!" << endl; GameObject a; GameObject b; b.OC_CB=bind(&GameObject::Destory,a); a.Create(); b.Create(); return 0;}
输出结果:
Hello world!
Creating…
Creating…
Destory
此 C++中类成员函数回调之实现也。
阅读全文
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 【算法】插入排序(从小到大) 排序范围(0~n-1)n为数组元素个数
- JAVA之路——前端与后端的职业选择
- 01_Servlet概述
- 欢迎使用CSDN-markdown编辑器
- storyboard autolayout 约束距底部空间跳动问题
- 欢迎使用CSDN-markdown编辑器
- CSS之中间固定两边自适应宽度
- opendaylight实现无线路由连接 -2
- 1.数组初始化
- iOS按钮设置图片在上文字在下
- linux下编译安装libcurl(附使用示例)
- web中常见的状态码
- 二元函数泰勒公式
- jdk动态代理原理