回调函数
来源:互联网 发布:乐视电视显示网络异常 编辑:程序博客网 时间:2024/06/08 10:53
类之间调用的原生态就是双向的,但是为了提升代码 可维护性,一般采用分层进行解耦。这样的话,上层可以直接使用底层函数,底层调用上层就采用回调的方式。
使用Windows API有很多场合就要提供回调函数。在这里,我把回调函数分为对象级,类级三种,并分别讲述其调用机制。
对象级回调函数,其常见的应用就是观察者模式。如下:
#include <iostream>#include <map>using namespace std;class Base{private: map <Base*,void (Base::*)()> subscriber;public: void Print(){cout<<"Base"<<endl;} void AddSubscriber(Base* obj ,void (Base::*memf)()) { subscriber.insert(pair<Base*,void (Base::*)()>(obj,memf)); } void publish() { map<Base*,void (Base::*)()>::iterator it=subscriber.begin(); for (;it!=subscriber.end();it++) { void (Base::*memf)()=it->second; (it->first->*memf)(); } }};class A:public Base{public: void PrintA(){cout<<"A"<<endl;}};class B:public Base{public: void PrintB(){cout<<"B"<<endl;}};class C:public Base{public: void PrintC(){cout<<"C"<<endl;}};int main(){ Base base; base.AddSubscriber(new A(),(void (Base::*)())&A::PrintA); base.AddSubscriber(new B(),(void (Base::*)())&B::PrintB); base.AddSubscriber(new C(),(void (Base::*)())&C::PrintC); base.publish(); system("pause");}
类级回调函数:
通过this指针和静态函数来实现。
- .NET 回调函数
- 回调函数
- 回调函数
- 回调函数概念
- 回调函数
- 回调函数
- 回调函数
- 回调函数 相关
- delphi 回调函数
- 回调函数
- 回调函数
- 回调函数学习
- 回调函数
- 关于回调函数
- 透析回调函数
- 回调函数
- 什么是回调函数
- 回调函数
- MySQL导出数据总结
- JBoss4.2.2.GA下部署OpenJWeb介绍
- 通达OA开发 增加批量删除工作流功能(图文)
- 字节序(Endian)、大端(Big-Endian)、小端(Little-Endian)
- Java SE 学习笔记 Lesson 9
- 回调函数
- MySQL中的mysqldump命令使用详解
- CountDownLatch
- linux下安装和使用mysql
- Android UI开发第十篇——锁屏效果
- 【二叉树】POJ 2255
- Exchanger
- SQL CHARINDEX函数的使用
- CSDN博文精选:最受欢迎的系列专栏博客推荐