c++回调函数杂谈
今天有一个小白问我:回调函数都是同步运行,好像没有什么意义呀?
额,一下就被问懵了。你是不是也有这样的感觉呢?
我说:1、回调函数可以放在线程中,那么程序就可以同时在做两件事情了。
2、回调函数至少是切换了代码的命名空间,放在不同的cpp中,可以可以引用的对象可以不同。
3、回调函数是改变写代码的思维方式。主线程将任务分配出去,等待完成后通知我即可。
在一个人静下来思考思考后,写下这篇杂文。
回调函数的定义
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
回调函数的作用
1、对于调用方,可以降低耦合(也就是可以减少需要关心的东西),仅在特定情况发生时处理。例如登陆模块,如果系统已经保存了账号密码内部就会自动登陆,仅失败时,才通知主线程显示登陆界面等待用户输入账号密码。
2、对于函数的设计者,可以设计一个通用的函数。例如列表,排序时通过回调函数得到排序顺序,就可以支持任意列的排序。
3、对于库的设计者,可以设计一个通用的功能,将部分功能留给调用方实现。例如海康威视的视频控件,将视频流通过回调函数返回到调用方,从而无需实现视频流绘制到窗口。
其他实现方式
1、模板类
在基类中实现模板功能。子类实现对应的接口函数。
2、接口类
定义接口类,函数根据接口类指针调用对应的函数。调用方通过继承接口实现相关功能。