c++回调函数总结及回调函数的封装资料

上传人:E**** 文档编号:102048304 上传时间:2019-10-01 格式:DOC 页数:5 大小:45.50KB
返回 下载 相关 举报
c++回调函数总结及回调函数的封装资料_第1页
第1页 / 共5页
c++回调函数总结及回调函数的封装资料_第2页
第2页 / 共5页
c++回调函数总结及回调函数的封装资料_第3页
第3页 / 共5页
c++回调函数总结及回调函数的封装资料_第4页
第4页 / 共5页
c++回调函数总结及回调函数的封装资料_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《c++回调函数总结及回调函数的封装资料》由会员分享,可在线阅读,更多相关《c++回调函数总结及回调函数的封装资料(5页珍藏版)》请在金锄头文库上搜索。

1、C+ 回调函数总结一、函数指针回调机制在 C 语言中是通过函数指针来实现的,通过将回调函数的地址传给被调函数从而实现回调(注意分清回调函数和被调函数的概念,以便于在下文论述中理解)。因此,要实现回调,必须首先定义函数指针,请看下面的例子:void Func (char *s);/ 函数原型void (*pFunc) (char *);/ 函数指针可以看出,函数的定义和函数指针的定义非常类似。一般情况下,为了简化函数指针类型的变量定义,提高程序的可读性,我们需要把函数指针类型自定义一下。typedef void(*pcb) (char *);回调函数也可以像普通函数一样被程序调用,但是只有它被当

2、作参数传递给被调函数时才能称作回调函数。被调函数:void GetCallBack (pcb callback)/*do something*/用户在调用上面的函数时,需要自己实现一个pcb 类型的回调函数:void fCallback (char *s)/* do something */然后,就可以直接把fCallback 当作一个参数传递给GetCallBack。GetCallBack(fCallback);二、什么是回调函数总结上述示例,回调函数就是一个通过函数指针调用的函数。如果你把函数指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。

3、回调函数是继续自C 语言的,因而,在C+中,应只在与C 代码建立接口,或与已有的回调接口打交道时,才使用回调函数。除了上述情况,在C+中应使用虚拟方法或函数符(functor),而不是回调函数。三、标准调用约定到目前为止,我们只讨论了函数指针及回调而没有去注意 ANSI C/C+ 的编译器规范。许多编译器有几种调用约定。Visual C/C+ 的编译器支持如下的函数调用约定:关键字清理堆栈参数入栈顺序_cdecl调用函数由右至左_stdcall被调用函数由右至左_fastcall被调用函数由右至左thiscall (非关键字)被调用函数由右至左任何支持开发基于 Win32 的程序都必须支持 _

4、stdcall 扩展或其等价物。以_stdcall 标识的函数使用了标准调用约定,为什么叫标准约定呢,因为所有的Win32 API(除了个别接受可变参数的除外)都使用它,这也是Pascal 的标准约定。与之相对应的是C/C+调用约定,为强制函数使用C/C+调用约定,可使用_cdecl,另外,可变参数函数也使用C/C+调用约定。Windows 操作系统采用了标准调用约定(Pascal 约定),因为其可减小代码的体积。如果不喜欢_stdcall,还可以使用CALLBACK 宏,它定义在windef.h 中:#define CALLBACK _stdcallor#define CALLBACK PA

5、SCAL / 而PASCAL 在此被#defined 成_stdcall四、简单示例int _stdcall CompareInts(const byte* velem1, const byte* velem2)int elem1 = *(int*)velem1;int elem2 = *(int*)velem2;if(elem1 elem2)return 1;return 0;int _stdcall CompareStrings(const byte* velem1, const byte* velem2)const char* elem1 = (char*)velem1;const ch

6、ar* 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 Bubblesortn;for(i=0; i 5; i+)cout arrayi n;Bubblesort(byte*)array, 5, sizeof(array0), &CompareInts);cout After the sortingn;for(i=0; i 5; i

7、+)cout arrayi n;const char str510 = estella,danielle,crissy,bo,angie;cout Before sorting strings with Quicksortn;for(i=0; i 5; i+)cout stri n;Quicksort(byte*)str, 5, 10, &CompareStrings);cout After the sortingn;for(i=0; i 5; i+)cout stri CompareInts2(velem1, velem2);void CompareInts2 (const byte* velem1, const byte* velem2)/ do something;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号