回调函数

来源:互联网 发布:乐视电视显示网络异常 编辑:程序博客网 时间: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指针和静态函数来实现。

原创粉丝点击