首页 > 技术文章 > 回调函数的使用

xlpsky 2016-12-14 10:26 原文

1、什么是回调函数

  简而言之,回调函数就是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另外一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。

2、为什么要使用回调函数

  因为回调函数可以把调用者和被调用者分开,调用者不关心谁是被调用者,所有它需要知道的,只是存在一个具有某种特定原型,某些限制条件(如返回值为int)的被调用函数。回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。

3、如何使用回调函数

  使用回调函数时,我们需要做三件事:

  (1)声明

  (2)定义

  (3)设置触发条件:在你的函数中把你的回调函数名臣转化为地址作为一个参数,以便于系统调用。

  #声明和定义时应该注意,回调函数由系统调用,所以可以认为它属于windows系统,不要把它当作你的某个类的成员函数。

函数指针的声明:

  对回调函数有了一个初步的了解,下面我们来说一下函数指针,因为要实现回调,必须首先定义函数指针:

  void(*)();

  #左边圆括弧中的星号是函数指针声明的关键。另外两个元素是函数的返回类型(void)和右边圆括弧中的入口参数。

函数指针声明类型定义

  Typedef void(* pfv)()

  #pfv是一个函数指针,它指向的函数没有输入参数,返回类型为void,使用这个类型定义名称可以隐藏负责的函数指针语法。

  void(*p)()

  void func()

  {

  ……

  }

  p = func;

  p的赋值可以不同,但一定要是函数的指针,并且参数和返回类型相同。

  例如:下面一个例子

[cpp] view plain copy
 
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. typedef void (*PF)(); //函数指针的声明  
  5. void func()   //回调函数定义  
  6. {  
  7.   cout << "func" << endl;  
  8. }  
  9.   
  10. void caller( PF pf)  //即触发条件  
  11. {  
  12.   pf();  
  13. }  
  14.   
  15. int main()  
  16. {  
  17.   PF p = func;  
  18.   caller(p);   //最终通过函数指针PF调用了回调函数func()  
  19.   
  20.   system("pause");  
  21.   
  22.   return 0;  
  23. }  

推荐阅读