C++中回调(CallBack)的使用方法
来源:互联网 发布:手机如何撤销淘宝投诉 编辑:程序博客网 时间:2024/05/26 02:20
原文:http://blog.csdn.net/force_eagle/article/details/4347329
回调函数是一个很有用,也很重要的概念。当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数。回调函数在windows编程使用的场合很多,比如Hook回调函数:MouseProc,GetMsgProc以及EnumWindows,DrawState的回调函数等等,还有很多系统级的回调过程。 一般情况下, 我们使用的回调函数基本都是采用C语言风格. 这里介绍一种C++风格的回调对象方法. 采用template实现.
- template < class Class, typename ReturnType, typename Parameter >
- class SingularCallBack
- {
- public:
- typedef ReturnType (Class::*Method)(Parameter);
- SingularCallBack(Class* _class_instance, Method _method)
- {
- //取得对象实例地址,及调用方法地址
- class_instance = _class_instance;
- method = _method;
- };
- ReturnType operator()(Parameter parameter)
- {
- // 调用对象方法
- return (class_instance->*method)(parameter);
- };
- ReturnType execute(Parameter parameter)
- {
- // 调用对象方法
- return operator()(parameter);
- };
- private:
- Class* class_instance;
- Method method;
- };
示例:
以下是两个类实现.
- class A
- {
- public:
- void output()
- {
- std::cout << "I am class A :D" << std::endl;
- };
- };
- class B
- {
- public:
- bool methodB(A a)
- {
- a.output();
- return true;
- }
- };
SingularCallBack的各种调用示例:
- A a;
- B b;
- SingularCallBack< B,bool,A >* cb;
- cb = new SingularCallBack< B,bool,A >(&b,&B::methodB);
- if((*cb)(a))
- {
- std::cout << "CallBack Fired Successfully!" << std::endl;
- }
- else
- {
- std::cout << "CallBack Fired Unsuccessfully!" << std::endl;
- }
- A a;
- B b;
- SingularCallBack< B,bool,A >* cb;
- cb = new SingularCallBack< B,bool,A >(&b,&B::methodB);
- if(cb->execute(a))
- {
- std::cout << "CallBack Fired Successfully!" << std::endl;
- }
- else
- {
- std::cout << "CallBack Fired Unsuccessfully!" << std::endl;
- }
- A a;
- B b;
- SingularCallBack< B,bool,A >cb(&b,&B::methodB);
- if(cb(a))
- {
- std::cout << "CallBack Fired Successfully!" << std::endl;
- }
- else
- {
- std::cout << "CallBack Fired Unsuccessfully!" << std::endl;
- }
- class AClass
- {
- public:
- AClass(unsigned int _id): id(_id){};
- ~AClass(){};
- bool AMethod(std::string str)
- {
- std::cout << "AClass[" << id << "]: " << str << std::endl;
- return true;
- };
- private:
- unsigned int id;
- };
- typedef SingularCallBack < AClass, bool, std::string > ACallBack;
- int main()
- {
- std::vector < ACallBack > callback_list;
- AClass a1(1);
- AClass a2(2);
- AClass a3(3);
- callback_list.push_back(ACallBack(&a1, &AClass::AMethod));
- callback_list.push_back(ACallBack(&a2, &AClass::AMethod));
- callback_list.push_back(ACallBack(&a3, &AClass::AMethod));
- for (unsigned int i = 0; i < callback_list.size(); i++)
- {
- callback_list[i]("abc");
- }
- for (unsigned int i = 0; i < callback_list.size(); i++)
- {
- callback_list[i].execute("abc");
- }
- return true;
- }
0
上一篇:epoll 使用实例
下一篇:偷Microsoft师学MFC艺:且看C++如何支持反射
相关热门文章
- bootstrap table 的onClickCel...
- 2015即将结束,2016年即将到来...
- screen防止终端掉线
- 欢迎扑克扫描仪使用方法在Chin...
- PHP函数补完:call_user_func(...
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- C++中回调(CallBack)的使用方法
- C++中回调(CallBack)的使用方法
- C++中回调(CallBack)的使用方法
- C++中回调(CallBack)的使用方法
- C++中回调(CallBack)的使用方法
- C++中回调(CallBack)的使用方法
- C++中回调(CallBack)的使用方法
- CallBack类的使用方法
- C++中CallBack类的使用方法
- callback c
- 一个关于CallBack机制的实例(C#)
- Python的点点滴滴(Callback From C Extending)
- C callback function example
- extern C的使用方法
- c#Brush的使用方法
- C#_ArrayList的使用方法
- C#_Queue的使用方法
- C#_Stack的使用方法
- C++ Template 中的typename、class关键字区别
- C++类模板的成员函数模板写法
- C++成员函数指针的应用
- POJ 1456 Supermarket(贪心)
- epoll 使用实例
- C++中回调(CallBack)的使用方法
- 偷Microsoft师学MFC艺:且看C++如何支持反射
- 简单的C++委托 —— 用模板类实现类成员函数的回调
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C++中RTTI的观念和使用
- C++类模板的三种特化
- 让模板类支持可变模板参数(不定个数的参数)
- 如何将一个模板类A作为模板类B的模板参数
- 玩弄C++:回调一个类成员函数
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
咋了爸爸
爸爸单词
和爸爸
你爸爸
爸爸是条龙
嗯爸爸
爸爸去哪里
爸爸来了
爸爸去那
爸爸爸爸
好爸爸坏爸爸
啊啊爸爸
爸爸啊
我爸爸
歌曲爸爸
爸爸要我
爸爸说
爸爸不要啊
爸爸啊啊
爸爸是
爸爸去那了
爸爸要
叫爸爸
谁是我爸爸
爸爸儿歌
爸爸歌
好爸爸坏爸爸魏一宁
让爸爸戒烟
好爸爸坏爸爸 演员
爸爸戒烟了
咋啦爸爸
亲宝网好爸爸坏爸爸
我爸爸 绘本
好爸爸坏爸爸演员表
爸爸爸爸亲爱的爸爸
给爸爸
爸爸回来
爸爸的爸爸是爷爷
爸爸啊爸爸
爸爸爸爸我有一个好爸爸
准爸爸