再论无处不在的回调机制---注册与回调

        回调函数的作用和用途,我就不多说了,之前也讨论过, 现在再来熟悉一下与回调函数相关的程序。 我们知道, 回调机制, 就是通过函数指针来实现的。

        说白了, 就是注册与回调。

 

     下面,直接上菜, 希望大家品尝:

 

#include <iostream>
using namespace std;

typedef void(*PF)();
PF g_pf = NULL;


/**********************************/
// B模块

// B模块向外提供的回调函数注册接口, 也就是说,提供注册服务, 想注册的,调用该接口即可
void registerFun(PF pf)
{
	g_pf = pf;
}


// B模块的某函数, 在一定条件下被触发
void fun()
{
	// 执行别的模块注册过来的回调函数
	(*g_pf)(); // or g_pf();
}

/**********************************/




/**********************************/
// A模块

// A模块的回调函数
void callBack()
{
	cout << "call back function" << endl;
}

// A 模块的主函数
int main()
{
	// A模块利用B模块的注册接口, 向B模块注册
	registerFun(callBack);

	// 在一定条件下,B模块的fun函数被触发了
	fun();

	return 0;
}

/**********************************/

 

 

 

     下面来搞笑一下:

 

#include <iostream>
using namespace std;

typedef void(*PointerToAction)();
PointerToAction g_pf = NULL;


/**********************************/
// 公司

// 公司提供登记服务, pf指向员工登记的某行为,比如提前登记获许在公司喝酒
void registerAction(PointerToAction pf)
{
	// 公司记录该员工已经登记获许的行为,比如可以在公司内喝酒
	g_pf = pf;
}


// 在公司内, 发生了该事件 :员工在公司内抽烟,被抓住了
void drinkAlcoholInCompany()
{
	// 去翻阅登记信息, 调取当时的登记资料
	(*g_pf)();
}

/**********************************/




/**********************************/
// 员工

// 员工将要登记的行为,即登记在公司内获许喝酒
void callBack()
{
	cout << "登记在公司内部可以喝酒, 我爱喝就喝。" << endl;
}

// 员工开始活动了
int main()
{
	// 员工第一天上班,去注册登记可以在公司内喝酒
	registerAction(callBack);

	// 员工在公司内喝酒,被抓住了
	drinkAlcoholInCompany();

	return 0;
}

/**********************************/


      最后,我要说,我不爱喝酒。

 

 

 

  • 13
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值