c++中如何实现回调的方法示例

  

  

c++中使用类语法实现回调(当然,,旧式的C函数指针回调也是支持的)
  

  

比如,有人提供一个类库AfCopyFile,能够提供文件拷贝的功能,而且能通知用户当前的进度…
  

        int DoCopy (const char *,   const char * dst,    AfCopyFileListener *侦听器);      

用户只需要自己实现一个AfCopyFileListener对象,传给这个函数就行…
  

        类MainJob:公共AfCopyFileListener {   int>   AfCopyFile房颤;   af.DoCopy(源,dst);之前      

  

无论是C语言的回调函数,还是c++里的倾听者,都有一个共同的缺点:

  

它使代码逻辑变得难以阅读。
  

  

我们应尽量避免使用回调机制,最好采用单向的函数调用。
  

  

  

<强> AfCopyFile.h

        的ifndef _AF_COPY_FILE_H   #定义_AF_COPY_FILE_H      类AfCopyFile   {   公众://作为内部类   侦听器类   {   公众:   虚拟int>   # include & lt; stdio.h>   # include & lt; Windows.h>      # include“AfCopyFile.h”//将LARGE_INTTEGER类型转成无符号很久   内联unsigned很久翻译(LARGE_INTEGER num)   {   无符号=num.HighPart很久结果;   结果& lt; & lt;=32;   结果+=num.LowPart;   返回结果;   }//回调函数//注:要求将此函数用关键字回调修饰(这是Windows API的要求)   静态DWORD调CopyProgress (   LARGE_INTEGER TotalFileSize,   LARGE_INTEGER TotalBytesTransferred,   LARGE_INTEGER StreamSize,   LARGE_INTEGER StreamBytesTransferred,   DWORD dwStreamNumber,   DWORD dwCallbackReason,   处理hSourceFile,   处理hDestinationFile,   值lpData)//& lt; -这个就是上下文件对象   {//计算百分比   无符号长长总=翻译(TotalFileSize);   无符号长长的复制=翻译(TotalBytesTransferred);//打印进度   AfCopyFile::侦听器*侦听器=(AfCopyFile:侦听器*)lpData;   侦听器→OnCopyProgress(总、复制);      返回PROGRESS_CONTINUE;   }      int AfCopyFile: DoCopy (const char *, const char * dst,侦听器*侦听器)   {   BOOL ret=CopyFileEx(源、dst   ,CopyProgress,//待回调的函数   侦听器,//上下文对象   零(0);      返回ret & # 63;0:1;   }      

<强> main.cpp

        # include & lt; stdio.h>   # include & lt; string.h>   # include“AfCopyFile.h”      类MainJob:公共AfCopyFile::侦听器   {   公众:   int DoJob ()   {   strcpy(用户、“shaofa”);   strcpy(来源,“c: \ \测试\ \ 2。rmvb”);   拷贝字符串(dst,“c: \ \测试\ \ 2 _copy.rmvb”);      AfCopyFile房颤;   af.DoCopy(源,dst);//将这传过去      返回0;   }      int OnCopyProgress(长长的,长长的转移)   {//打印进度   int比例=(int)((转移* 100/总));   printf("(用户:% s], % s→% s:进度% d % % \ n”,   用户、源dst、百分比);      返回0;   }      私人:   炭源[256];   char dst [256];   字符用户[64];   };      int main ()   {   MainJob工作;   job.DoJob ();      返回0;   }      

  

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

c++中如何实现回调的方法示例