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

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

ID:44694805

大小:45.50 KB

页数:5页

时间:2019-10-25

c++回调函数总结及回调函数的封装_第1页
c++回调函数总结及回调函数的封装_第2页
c++回调函数总结及回调函数的封装_第3页
c++回调函数总结及回调函数的封装_第4页
c++回调函数总结及回调函数的封装_第5页
资源描述:

《c++回调函数总结及回调函数的封装》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

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

2、har*);回调函数也可以像普通函数一样被程序调用,但是只有它被当作参数传递给被调函数时才能称作回调函数。被调函数:voidGetCallBack(pcbcallback){/*dosomething*/}用户在调用上面的函数时,需要自己实现一个pcb类型的回调函数:voidfCallback(char*s){/*dosomething*/}然后,就可以直接把fCallback当作一个参数传递给GetCallBack。GetCallBack(fCallback);二、什么是回调函数总结上述示例,回调函数就是

3、一个通过函数指针调用的函数。如果你把函数指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数是继续自C语言的,因而,在C++中,应只在与C代码建立接口,或与已有的回调接口打交道时,才使用回调函数。除了上述情况,在C++中应使用虚拟方法或函数符(functor),而不是回调函数。三、标准调用约定到目前为止,我们只讨论了函数指针及回调而没有去注意ANSIC/C++的编译器规范。许多编译器有几种调用约定。VisualC/C++的编译器支持如下的函数调用约定:关

4、键字清理堆栈参数入栈顺序__cdecl调用函数由右至左__stdcall被调用函数由右至左__fastcall被调用函数由右至左thiscall(非关键字)被调用函数由右至左任何支持开发基于Win32的程序都必须支持__stdcall扩展或其等价物。以__stdcall标识的函数使用了标准调用约定,为什么叫标准约定呢,因为所有的Win32API(除了个别接受可变参数的除外)都使用它,这也是Pascal的标准约定。与之相对应的是C/C++调用约定,为强制函数使用C/C++调用约定,可使用__cdecl,另外,

5、可变参数函数也使用C/C++调用约定。Windows操作系统采用了标准调用约定(Pascal约定),因为其可减小代码的体积。如果不喜欢__stdcall,还可以使用CALLBACK宏,它定义在windef.h中:#defineCALLBACK__stdcallor#defineCALLBACKPASCAL//而PASCAL在此被#defined成__stdcall四、简单示例int__stdcallCompareInts(constbyte*velem1,constbyte*velem2){intelem1

6、=*(int*)velem1;intelem2=*(int*)velem2;if(elem1elem2)return1;return0;}int__stdcallCompareStrings(constbyte*velem1,constbyte*velem2){constchar*elem1=(char*)velem1;constchar*elem2=(char*)velem2;returnstrcmp(elem1,elem2);}intmain(intar

7、gc,char*argv[]){inti;intarray[]={5432,4321,3210,2109,1098};cout<<"BeforesortingintswithBubblesort";for(i=0;i<5;i++)cout<

8、';constcharstr[5][10]={"estella","danielle","crissy","bo","angie"};cout<<"BeforesortingstringswithQuicksort";for(i=0;i<5;i++)cout<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。