回调函数个人浅见

网上关于回调函数的解释非常多,概念、代码、各种类比都很全面,这里只结合项目谈谈自己的理解。

软件基于MF框架从摄像头采集视频,其中一项功能是将帧图像保存为bmp格式。整个功能可以分两步实现,即数据采集和格式转换。数据采集由框架自带的函数实现,将采集到的图像数据push入队列,并于适当的时机pop出来,由函数实现图像格式的转换和保存。

我一开始的思路是用通信中握手的方式,当数据push后给主窗口发送一条自定义消息,由消息响应函数将数据pop出来并进行处理。这种方式需要数据调用方(界面)和发送方(底层)事先约定好,当数据采集方法封装成库时(实际上几乎一定会这样),需要使用者去了解库的细节,因此这种方式非常不灵活。

后来用回调函数实现功能。我把回调函数理解成一张图纸,好比说我需要做一件衣服,或者一条裤子,我画一张图纸去完成我的需求,虽然我没有布和线等材料,但我可以把图纸交给裁缝店替我把需求实现了。这里我的图纸就是回调函数,裁缝店就是调用方。用代码可以写成:

typedef void (CALLBACK *blueprint)(param1, ... , paramN);      //回调函数
void WINAPI tailor(param1, ... , paramN, blueprint my_suit);   //调用方

具体到项目中,回调函数的功能是实现格式转换和保存,调用借口由底层提供,功能是提供图像数据。这样调用方可以不但可以将数据保存为bmp,还能通过修改回调保存成其他格式,实现了函数的多态。

你可能感兴趣的:(回调函数个人浅见)