c语言callback函数用法,c语言callback

  c语言callback函数用法,c语言callback

  回调函数是一个很有用,也很重要的概念。当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数。回调函数在窗子编程使用的场合很多,比如钩回调函数:MouseProc,GetMsgProc以及EnumWindows,DrawState的回调函数等等,还有很多系统级的回调过程。一般情况下,我们使用的回调函数基本都是采用C语言风格。这里介绍一种C风格的回调对象方法。采用模板实现。

  查看剪贴板打印文本?

  模板类类,typename返回类型,typename参数

  类SingularCallBack

  {

  公共:

  typedef ReturnType(类:*方法)(参数);

  SingularCallBack(Class * _ Class _ instance,Method _method)

  {

  //取得对象实例地址,及调用方法地址

  class _ instance=_ class _ instance;

  方法=_方法

  };

  返回类型运算符()(参数参数)

  {

  //调用对象方法

  return(class _ instance-*方法)(参数);

  };

  ReturnType执行(参数参数)

  {

  //调用对象方法

  返回运算符()(参数);

  };

  私人:

  类别*类别实例

  方法方法;

  };

  模板类类,typename返回类型,typename参数

  类SingularCallBack

  {

  公共:

  typedef ReturnType(类:*方法)(参数);

  SingularCallBack(Class * _ Class _ instance,Method _method)

  {

  //取得对象实例地址,及调用方法地址

  class _ instance=_ class _ instance;

  方法=_方法

  };

  返回类型运算符()(参数参数)

  {

  //调用对象方法

  return(class _ instance-*方法)(参数);

  };

  ReturnType执行(参数参数)

  {

  //调用对象方法

  返回运算符()(参数);

  };

  私人:

  类别*类别实例

  方法方法;

  };

  示例:

  以下是两个类实现。

  查看剪贴板打印文本?

  A级

  {

  公共:

  无效输出()

  {

   std:cout 我是A级:D的STD:endl;

  };

  };

  B类

  {

  公共:

  布尔方法乙(甲)

  {

  答。output();

  返回真实的

  }

  };

  A级

  {

  公共:

  无效输出()

  {

   std:cout 我是A级:D的STD:endl;

  };

  };

  B类

  {

  公共:

  布尔方法乙(甲)

  {

  答。output();

  返回真实的

  }

  };

  SingularCallBack的各种调用示例:

  查看剪贴板打印文本?

  一个

  电子商务

  SingularCallBack B,bool,A * cb

  cb=new SingularCallBack B,bool,A ( b,B:methodB);

  如果((*cb)(a))

  {

   std:cout 回调成功激发!STD:endl;

  }

  其他

  {

   std:cout 回调触发不成功!STD:endl;

  }

  一个

  电子商务

  SingularCallBack B,bool,A * cb

  cb=new SingularCallBack B,bool,A ( b,B:methodB);

  如果((*cb)(a))

  {

   std:cout 回调成功激发!STD:endl;

  }

  其他

  {

   std:cout 回调触发不成功!STD:endl;

  }

  查看剪贴板打印文本?

  一个

  电子商务

  SingularCallBack B,bool,A * cb

  cb=new SingularCallBack B,bool,A ( b,B:methodB);

  if(cb- execute(a))

  {

   std:cout 回调成功激发!STD:endl;

  }

  其他

  {

   std:cout 回调触发不成功!STD:endl;

  }

  一个

  电子商务

  SingularCallBack B,bool,A * cb

  cb=new SingularCallBack B,bool,A ( b,B:methodB);

  if(cb- execute(a))

  {

   std:cout 回调成功激发!STD:endl;

  }

  其他

  {

   std:cout 回调触发不成功!STD:endl;

  }

  查看剪贴板打印文本?

  一个

  电子商务

  SingularCallBack B,bool,A cb( b,B:methodB);

  if(cb(a))

  {

   std:cout 回调成功激发!STD:endl;

  }

  其他

  {

   std:cout 回调触发不成功!STD:endl;

  }

  一个

  电子商务

  SingularCallBack B,bool,A cb( b,B:methodB);

  if(cb(a))

  {

   std:cout 回调成功激发!STD:endl;

  }

  其他

  {

   std:cout 回调触发不成功!STD:endl;

  }

  查看剪贴板打印文本?

  a级

  {

  公共:

  a类(无符号int _ id):id(_ id){ };

  ~ a class(){ };

  布尔方法(标准:字符串str)

  {

  STD:cout a class[ id ]: str STD:endl;

  返回真实的

  };

  私人:

  无符号整数id;

  };

  typedef SingularCallBack AClass,bool,STD:string a callback;

  int main()

  {

  STD:vector a回调callback _ list

  a类a1(1);

  a类a2(2);

  a3类(3);

  回调_列表。push _ back(一个回调(a1,a class:AMethod));

  回调_列表。push _ back(一个回调(a2,a class:AMethod));

  回调_列表。push _ back(一个回调(a3,a class:AMethod));

  对于(无符号int I=0;我回调_列表。size();我)

  {

  callback _ list[I]( ABC );

  }

  对于(无符号int I=0;我回调_列表。size();我)

  {

  回调_列表[我].执行(‘ABC’);

  }

  返回真实的

  }

  a级

  {

  公共:

  a类(无符号int _ id):id(_ id){ };

  ~ a class(){ };

  布尔方法(标准:字符串str)

  {

  STD:cout a class[ id ]: str STD:endl;

  返回真实的

  };

  私人:

  无符号整数id;

  };

  typedef SingularCallBack AClass,bool,STD:string a callback;

  int main()

  {

  STD:vector a回调callback _ list

  a类a1(1);

  a类a2(2);

  a3类(3);

  回调_列表。push _ back(一个回调(a1,a class:AMethod));

  回调_列表。push _ back(一个回调(a2,a class:AMethod));

  回调_列表。push _ back(一个回调(a3,a class:AMethod));

  对于(无符号int I=0;我回调_列表。size();我)

  {

  callback _ list[I]( ABC );

  }

  对于(无符号int I=0;我回调_列表。size();我)

  {

  回调_列表[我].执行(‘ABC’);

  }

  返回真实的

  }

  引用:

  c回调解决方案(http://www。再见。net/编程/模板回调/索引。html)

  本文来自程序员博客,转载请标明出处:http://博客。csdn。net/force _ eagle/archive/2009/07/14/4347329。文件

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: