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

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  界面处理类 CShowGUI,数据上传类 CUploadData

  class CUploadData
  {
  ......
  typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
  int UploadFile(LPCTSTR lpFileNamePath,LPVOID lparam,SetUploadCaller Caller );
  // 接受外界出入的参数,主要是回调函数的地址通过参数Caller,
  int Send(LPCTSTR lpServerIP, LPCTSTR lpServerPort, LPCTSTR UploadFilePath) ;
  ...... // 注意此时不在需要GetCurState 函数了 。
  }

  class CShowGUI: public CDialog
  {
  .......
  typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
  void SetCallBack(LPCTSTR strPath);
  static int GetCurState(int nCurData, int nInAll, void * pParam) ;
  CUploadData m_Uploa
  d ; // 数据上传类是界面显示类的一个成员变量。
  .......
  }

  void CShowGUI :: SetCallBack(LPCTSTR strPath)
  {
  CUploadData myUploadData ;
  SetUploadCaller myCaller; // 声明一个函数指针变量
  myCaller = CurState ; // 取得界面处理函数的地址
  myUploadData .UploadFile(strPath,this,myCaller); // 界面处理类的函数传入,实现了数据传入与界面处理的分离 .
  }

  通过上面的演示做到了界面与数据的分离,回调函数分别扮演了不同角色,所以随着处理问题的不同应灵活应用,但同样因为处理数据类不知道界面处理类或外部调用类的类型,而更无法灵活地处理界面的不同显示方式。这方面还希望喜欢钻研技术的朋友继续研究。

  界面处理类 CShowGUI,数据上传类 CUploadData

  class CUploadData
  {
  ......
  typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
  int UploadFile(LPCTSTR lpFileNamePath,LPVOID lparam,SetUploadCaller Caller );
  // 接受外界出入的参数,主要是回调函数的地址通过参数Caller,
  int Send(LPCTSTR lpServerIP, LPCTSTR lpServerPort, LPCTSTR UploadFilePath) ;
  ...... // 注意此时不在需要GetCurState 函数了 。
  }

  class CShowGUI: public CDialog
  {
  .......
  typedef int(*SetUploadCaller)(int nCurData, int nInAll, void * pParam);
  void SetCallBack(LPCTSTR strPath);
  static int GetCurState(int nCurData, int nInAll, void * pParam) ;
  CUploadData m_Uploa
  d ; // 数据上传类是界面显示类的一个成员变量。
  .......
  }

  void CShowGUI :: SetCallBack(LPCTSTR strPath)
  {
  CUploadData myUploadData ;
  SetUploadCaller myCaller; // 声明一个函数指针变量
  myCaller = CurState ; // 取得界面处理函数的地址
  myUploadData .UploadFile(strPath,this,myCaller); // 界面处理类的函数传入,实现了数据传入与界面处理的分离 .
  }

  通过上面的演示做到了界面与数据的分离,回调函数分别扮演了不同角色,所以随着处理问题的不同应灵活应用,但同样因为处理数据类不知道界面处理类或外部调用类的类型,而更无法灵活地处理界面的不同显示方式。这方面还希望喜欢钻研技术的朋友继续研究。

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答