回调函数的使用
1、什么是回调函数
简而言之,回调函数就是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另外一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。
2、为什么要使用回调函数
因为回调函数可以把调用者和被调用者分开,调用者不关心谁是被调用者,所有它需要知道的,只是存在一个具有某种特定原型,某些限制条件(如返回值为int)的被调用函数。回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。
3、如何使用回调函数
使用回调函数时,我们需要做三件事:
(1)声明
(2)定义
(3)设置触发条件:在你的函数中把你的回调函数名臣转化为地址作为一个参数,以便于系统调用。
#声明和定义时应该注意,回调函数由系统调用,所以可以认为它属于windows系统,不要把它当作你的某个类的成员函数。
函数指针的声明:
对回调函数有了一个初步的了解,下面我们来说一下函数指针,因为要实现回调,必须首先定义函数指针:
void(*)();
#左边圆括弧中的星号是函数指针声明的关键。另外两个元素是函数的返回类型(void)和右边圆括弧中的入口参数。
函数指针声明类型定义
Typedef void(* pfv)()
#pfv是一个函数指针,它指向的函数没有输入参数,返回类型为void,使用这个类型定义名称可以隐藏负责的函数指针语法。
void(*p)()
void func()
{
……
}
p = func;
p的赋值可以不同,但一定要是函数的指针,并且参数和返回类型相同。
例如:下面一个例子
- #include <iostream>
- using namespace std;
- typedef void (*PF)(); //函数指针的声明
- void func() //回调函数定义
- {
- cout << "func" << endl;
- }
- void caller( PF pf) //即触发条件
- {
- pf();
- }
- int main()
- {
- PF p = func;
- caller(p); //最终通过函数指针PF调用了回调函数func()
- system("pause");
- return 0;
- }