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

文章作者 100test 发表时间 2007:08:06 12:57:02
来源 100Test.Com百考试题网


界面处理类 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). // 界面处理类的函数传入,实现了数据传入与界面处理的分离 .
  }

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


src="/ncre2/js/wxgg.js">

相关文章


程序开发:目前主流开发技术的分析和总结
C 中回调函数使用的变身大法
C 类型转换时定义非成员函数
对C#开发两个基本原则的深入讨论
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛