回调函数
来源:互联网 发布:李子柒身世知乎 编辑:程序博客网 时间:2024/05/12 11:43
回调函数
在计算机程序设计中,回调函数,是指通过函数参数传递到其他代码的,某一块可执行代码的引用。这一设计允许了底层的代码调用高层的子程序。回调函数在.net平台中相当于委托。
回调函数的机制
- 定义一个回调函数。
- 提供函数实现的一方在初始化的时候,将回调函数的函数指针给调用者。
- 当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
为什么要使用回调函数
因为可以把调用者和被调用者分开,所以调用者不关心谁是被调用者。它只需要知道存在一个具有特定原型和限制条件的被调用函数。
代码实现
下面创建了一个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;
}
“`
- .NET 回调函数
- 回调函数
- 回调函数
- 回调函数概念
- 回调函数
- 回调函数
- 回调函数
- 回调函数 相关
- delphi 回调函数
- 回调函数
- 回调函数
- 回调函数学习
- 回调函数
- 关于回调函数
- 透析回调函数
- 回调函数
- 什么是回调函数
- 回调函数
- appendchild的两个正确用法以及ajax
- 在VS2013安装 NuGet
- 最近在做一个图片编辑的项目,感觉挺好的,分享下
- 老公的忏悔
- java客户端模拟表单上传文件
- 回调函数
- c++ vector(向量)使用方法详解(顺序访问vector的多种方式)
- 非常有用的101道算法部分常见面试题
- 好丈夫不是一个模样
- 15第六周项目四——成员函数、友元函数和一般函数的区别(2)
- Spark编程指南笔记
- Mybatis3.x与Spring4.x整合
- Android 数据缓存-文件存储
- C++ 32位系统内存对齐