C++ 回调函数

一:

 //声明函数指针,定义一个回调函数的模板,在一个头文件中,比如从common.h
typedef void(*CallbackFun)(int a);

很简单,一个void类型的函数,入参是一个int型的整数

二:

A 类
A.h

#ifndef A_H
#define A_H
#include "common.h"
// 这个是回调的执行函数 ,在这边会调用B的方法
class A
{
public:
    A();
    virtual ~A();
    void todo();// 触发,去做dosomething
    void dosomething();//这是A要做的事
    void registCallback(CallbackFun callback);//B通过这个,把具体要做的事告诉A
private:
    CallbackFun m_Function;
};
#endif // !A_H

A.cpp

A::~A()
{
}

void A::registCallback(CallbackFun callback)
{
    m_Function = callback;
}

void A::dosomething()
{
    m_Function(66);
}

void A::todo()
{
    dosomething();
}

B类
B.h

#ifndef B_H
#define B_H
#include <iostream>
using namespace std;
// 这个是定义回调函数内容(具体实现)的函数
class B
{
public:
    B();
    ~B();
    static void testA(int aa)
    {
        cout << "BBBB:" <<aa<< endl;
    }
};
#endif // !B_H

B.cpp

#include "B.h"
#include <iostream>
#include "A.h"


B::B()
{
    A *a = new A();
    a->registCallback(testA);
    a->todo();
}


B::~B()
{
}

// 主函数,执行
int main()
{
    B b;
    getchar();
}

硬要理解的话:
1.A对B说,我想要做个事,但是这个事的具体内容,我不知道,但是我定义好这个行动的类型了,叫sb计划(就是定义一个模板typedef void(*CallbackFun)(int a))
2.具体啥时候做呢,在比如说明天下午3点(这里就是怎么触发它,上面就是调用todo()方法))
3.A想让B来制定活动的内容,你想好了,就打电话告诉我(A留下了它的电话registCallback(CallBack callback))
4.B想好了活动的内容(B中的static void testA(int aa),就是B想的内容),然后通过A留下的电话告诉了它(a->registCallback(testA);)
5.B提醒A时间到了,A去执行了活动(a->todo();触发执行)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值