C++ 再论无处不在的回调机制---注册与回调
回调函数的作用和用途,我就不多说了,之前也讨论过, 现在再来熟悉一下与回调函数相关的程序。 我们知道, 回调机制, 就是通过函数指针来实现的。
说白了, 就是注册与回调。
下面,直接上菜, 希望大家品尝:
1 #include <iostream> 2 using namespace std; 3 4 typedef void(*PF)(); 5 PF g_pf = NULL; 6 7 8 /**********************************/ 9 // B模块 10 11 // B模块向外提供的回调函数注册接口, 也就是说,提供注册服务, 想注册的,调用该接口即可 12 void registerFun(PF pf) 13 { 14 g_pf = pf; 15 } 16 17 18 // B模块的某函数, 在一定条件下被触发 19 void fun() 20 { 21 // 执行别的模块注册过来的回调函数 22 (*g_pf)(); // or g_pf(); 23 } 24 25 /**********************************/ 26 27 28 29 30 /**********************************/ 31 // A模块 32 33 // A模块的回调函数 34 void callBack() 35 { 36 cout << "call back function" << endl; 37 } 38 39 // A 模块的主函数 40 int main() 41 { 42 // A模块利用B模块的注册接口, 向B模块注册 43 registerFun(callBack); 44 45 // 在一定条件下,B模块的fun函数被触发了 46 fun(); 47 48 return 0; 49 } 50 51 /**********************************/
下面来搞笑一下:
1 #include <iostream> 2 using namespace std; 3 4 typedef void(*PointerToAction)(); 5 PointerToAction g_pf = NULL; 6 7 8 /**********************************/ 9 // 公司 10 11 // 公司提供登记服务, pf指向员工登记的某行为,比如提前登记获许在公司喝酒 12 void registerAction(PointerToAction pf) 13 { 14 // 公司记录该员工已经登记获许的行为,比如可以在公司内喝酒 15 g_pf = pf; 16 } 17 18 19 // 在公司内, 发生了该事件 :员工在公司内抽烟,被抓住了 20 void drinkAlcoholInCompany() 21 { 22 // 去翻阅登记信息, 调取当时的登记资料 23 (*g_pf)(); 24 } 25 26 /**********************************/ 27 28 29 30 31 /**********************************/ 32 // 员工 33 34 // 员工将要登记的行为,即登记在公司内获许喝酒 35 void callBack() 36 { 37 cout << "登记在公司内部可以喝酒, 我爱喝就喝。" << endl; 38 } 39 40 // 员工开始活动了 41 int main() 42 { 43 // 员工第一天上班,去注册登记可以在公司内喝酒 44 registerAction(callBack); 45 46 // 员工在公司内喝酒,被抓住了 47 drinkAlcoholInCompany(); 48 49 return 0; 50 } 51 52 /**********************************/
最后,我要说,我不爱喝酒。
分类: C/C++