选择显示字体大小

c++中回调函数使用的变身大法


  1、在这里设:回调函数为a()(这是最简单的情况,不带参数,但我们应用的实际情况常常很会复杂),使用回调函数的操作函数为b(), 但b函数是需要参数的,这个参数就是指向函数a的地址变量,这个变量一般就是函数指针。使用方法为:

int a(char *p); // 回调函数
typedef int(*callback)(char *p) ; // 声明callback 类型的函数指针
callback mycallback ; // 声明函数指针变量
mycallback = a; // 得到了函数a的地址

  b函数一般会写为 b(callback lpcall,char * p,........); // 此处省略了p后的参数形式 。

  所以回调机制可解为,函数b要完成一定功能,但他自己是无法实现全部功能的。 需要借助于函数a来完成,也就是回调函数。b的实现为:

b(callback lpcall,char *pprovide)
{
 ........... // b 的自己实现功能语句
 lpcall(ppprovide); // 借助回调完成的功能 ,也就是a函数来处理的。
 ........... // b 的自己实现功能语句
}
// -------------- 使用例子 -------------
char *p = "hello!";
callback mycallback ;
mycallback = a ;
b(a, p);

  以上就是回调的基本应用,本文所说的变身,其实是利用传入不同的函数地址,实现调用者类与回调函数所在类的不同转换。

  1、问题描述

  cuploadfile 类完成数据上传,与相应的界面进度显示。

  主要函数send(...) 和回调函数 getcurstate() ;

class cuploadfile : public cdialog
{
 ......
 int send(lpctstr lpserverip, lpctstr lpserverport, lpctstr uploadfilepath) ;
 static int getcurstate(int ncurdone, int ninall, void * pparam) ;
 ......
}
int cuploadfile ::send(lpctstr lpserverip, lpctstr lpserverport, lpctstr uploadfilepath)
{
 ... // 导出传输数据的函数
 int ret = upload( (lpstr)(lpctstr)m_strdata,
    getcurstate, // 在这个回调函数中处理界面
    this, // cuploadfile 的自身指针 ,也就是pparam 所接受的参数
    (lpstr)(lpctstr)uploadfilepath,
    "",
    "",
 );
}
int cuploadfile ::getcurstate(int ncurdata, int ninall, void * pparam)
{
 .........
 uploadfile *pthis = (uploadfile *)pparam; // ncurdata 当前以传出的数据量
 // ninall 总的数据量
 // 有了pthis可以对界面进行各种操作了。
 .............
}

  但大家仔细观察就可以发现,这个类把数据传送和界面显示聚和到了一起,不容易得到复用。而且在复用过程中需要改动较多的地方 。

  请大家记住现在的回调函数传入的类本身的静态成员函数。

  现在我们把数据的传送和界面的显示分离。回调则要传入的是界面处理类的静态函数。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons