码迷,mamicode.com
首页 > 其他好文 > 详细

回调函数

时间:2015-04-12 14:52:13      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:回调函数

回调函数

在计算机程序设计中,回调函数,是指通过函数参数传递到其他代码的,某一块可执行代码的引用。这一设计允许了底层的代码调用高层的子程序。

回调函数的机制

  1. 定义一个回调函数。
  2. 提供函数实现的一方在初始化的时候,将回调函数的函数指针给调用者。
  3. 当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。

    为什么要使用回调函数

    因为可以把调用者和被调用者分开,所以调用者不关心谁是被调用者。它只需要知道存在一个具有特定原型和限制条件的被调用函数。

代码实现

下面创建了一个sort.dll的动态链接库,它导出了一个名为CompareFunction的类型–typedef int (__stdcall CompareFunction)(const byte,const byte*),它就是回调函数的类型。另外,它也导出了两个方法:Bubblesort()和Quicksort(),这两个方法原型相同,但实现了不同的排序算法。

void DLLDIR __stdcall Bubblesort(byte* array,int size,int elem_size,CompareFunction cmpFunc);

void DLLDIR __stdcall Quicksort(byte* array,int size,int elem_size,CompareFunction cmpFunc);

这两个函数接受以下参数:

·byte * array:指向元素数组的指针(任意类型)。

·int size:数组中元素的个数。

·int elem_size:数组中一个元素的大小,以字节为单位。

·CompareFunction cmpFunc:带有上述原型的指向回调函数的指针。

回调函数实例

int __stdcall CompareInts(const byte* velem1,const byte* velem2)

{

int elem1 = *(int*)velem1;

int elem2 = *(int*)velem2;

if(elem1 < elem2)

return -1;

if(elem1 > elem2)

return 1;

return 0;

}

int __stdcall CompareStrings(const byte* velem1,const byte* velem2)

{

const char* elem1 = (char*)velem1;

const char* elem2 = (char*)velem2;

return strcmp(elem1,elem2);

}

int main(int argc,char* argv[])

{

int i;

int array[] = {5432,4321,3210,2109,1098};

cout << “Before sorting ints with Bubblesort\n”;

for(i=0; i < 5; i++)

cout << array<< ‘\n’;

Bubblesort((byte*)array,5,sizeof(array[0]),&CompareInts);

cout << “After the sorting\n”;

for(i=0; i < 5; i++)

cout << array<< ‘\n’;

const char str[5][10] = {“estella”,”danielle”,”crissy”,”bo”,”angie”};

cout << “Before sorting strings with Quicksort\n”;

for(i=0; i < 5; i++)

cout << str<< ‘\n’;

Quicksort((byte*)str,5,10,&CompareStrings);

cout << “After the sorting\n”;

for(i=0; i < 5; i++)

cout << str<< ‘\n’;

return 0;

}
“`

回调函数

标签:回调函数

原文地址:http://blog.csdn.net/neal1991/article/details/45009377

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!