函数指针和回调函数
2016-05-03 22:49
162 查看
假设层A位于层B的上层,层A调用层B的函数,称层A为caller,层B中被调用的函数被称为callee,层A中被callee回调的函数称为callbacker。1. 回调函数
回调函数是通过caller向callee传递callbacker的函数指针实现,当在callee中callbacker被调用时,称为发生回调,而callbacker则称为回调函数。callee无需关心callbacker的实现细节和所处理的具体的数据类型,仅需知道callbacker的原型即可,而callbacker的实现由caller负责,其中包括实现细节(算法)和数据类型。
回调函数可以实现动态绑定,即通过在运行时向callee传递不同的函数指针,从而调用不同的函数。例如,排序算法中需要按某种规则比较数据,callee无需知道数据比较的方法以及数据的类型,而仅仅关心比较数据的个数以及比较结果的含义,具体的比较操作由callbacker负责,数据类型可以是原始数据类型也可以是结构体类型。
回调可以实现消息通知和事件驱动,比如callee中发生某个事件时,需要通知caller或者需要caller完成某种功能,则可以通过回调机制实现。
2. 函数指针
回调机制是通过传递函数指针实现,而函数指针则是指向函数的指针,函数指针的定义可以使用两种形式:
(1)直接定义
函数返回类型 (*函数指针名)(形参表);
(2)使用typedef
typedef 函数返回类型 (*新类型名)(形参表);
新类型名 函数指针名;
回调函数是通过caller向callee传递callbacker的函数指针实现,当在callee中callbacker被调用时,称为发生回调,而callbacker则称为回调函数。callee无需关心callbacker的实现细节和所处理的具体的数据类型,仅需知道callbacker的原型即可,而callbacker的实现由caller负责,其中包括实现细节(算法)和数据类型。
回调函数可以实现动态绑定,即通过在运行时向callee传递不同的函数指针,从而调用不同的函数。例如,排序算法中需要按某种规则比较数据,callee无需知道数据比较的方法以及数据的类型,而仅仅关心比较数据的个数以及比较结果的含义,具体的比较操作由callbacker负责,数据类型可以是原始数据类型也可以是结构体类型。
回调可以实现消息通知和事件驱动,比如callee中发生某个事件时,需要通知caller或者需要caller完成某种功能,则可以通过回调机制实现。
2. 函数指针
回调机制是通过传递函数指针实现,而函数指针则是指向函数的指针,函数指针的定义可以使用两种形式:
(1)直接定义
函数返回类型 (*函数指针名)(形参表);
(2)使用typedef
typedef 函数返回类型 (*新类型名)(形参表);
新类型名 函数指针名;
相关文章推荐
- C语言中的函数指针基础学习教程
- C++编程中的函数指针初步解析
- 深入解析C语言中函数指针的定义与使用
- C语言中的函数指针学习笔记
- 实例解析C++中类的成员函数指针
- C++普通函数指针与成员函数指针实例解析
- C++基础入门教程(九):函数指针之回调
- C语言中函数与指针的应用总结
- 简要说明C语言中指针函数与函数指针的区别
- 简明的C++函数指针学习教程
- 函数指针与指针函数的学习总结
- C++中的函数指针与函数对象的总结
- c++函数指针使用示例分享
- 详解C语言编程中的函数指针以及函数回调
- 深入解析函数指针与返回函数的指针
- 如何通过函数指针调用函数(实现代码)
- C#委托所蕴含的函数指针概念详细解析
- C++基础入门教程(八):函数指针
- 浅谈在Swift中关于函数指针的实现
- 游戏开发基础知识2——函数指针