C++ 委托 fastdelegate使用,实现类函数回调绑定

本文介绍了一个使用C++ fastdelegate库实现的委托绑定示例。通过实例展示了如何将类成员函数绑定到委托,并通过委托调用这些成员函数进行加法、减法和乘法运算。
C++代码  收藏代码
  1. #include <stdio.h>  
  2. #include "fastdelegate.h"  
  3.   
  4. ///////////////////////////////  
  5. //被委托绑定的类成员函数  
  6. class Calculator  
  7. {  
  8. public:  
  9.     int Add(int nA, int nB)  
  10.     {  
  11.         return nA + nB;  
  12.     }  
  13.   
  14.     int Sub(int nA, int nB)  
  15.     {  
  16.         return nA - nB;  
  17.     }  
  18.   
  19.     int Multi(int nA, int nB)  
  20.     {  
  21.         return nA  * nB;  
  22.     }  
  23. };  
  24. /////////////////////////////////////////////////////////////////  
  25. //定义函数指针  
  26. typedef fastdelegate::FastDelegate2<intintint> AddFunc;  
  27. typedef fastdelegate::FastDelegate2<intintint> SubFunc;  
  28. typedef fastdelegate::FastDelegate2<intintint> MultiFunc;  
  29.   
  30. //实现绑定到处理类  
  31. class CalcHander  
  32. {  
  33. public:  
  34.   
  35.     template <class X, class Y, class Param1, class Param2, class RetType>  
  36.     void bind_add(Y* x, RetType (X::*func)(Param1 p1, Param2 p2))  
  37.     {  
  38.         pAddFunc = fastdelegate::MakeDelegate(x, func);  
  39.     }  
  40.   
  41.     template <class X, class Y, class Param1, class Param2, class RetType>  
  42.     void bind_sub(Y* x, RetType (X::*func)(Param1 p1, Param2 p2))  
  43.     {  
  44.         pSubFunc = fastdelegate::MakeDelegate(x, func);  
  45.     }  
  46.   
  47.     template <class X, class Y, class Param1, class Param2, class RetType>  
  48.     void bind_Multi(Y* x, RetType (X::*func)(Param1 p1, Param2 p2))  
  49.     {  
  50.         pMultiFunc = fastdelegate::MakeDelegate(x, func);  
  51.     }  
  52.   
  53. public:  
  54.   
  55.     void Init(Calculator *pCalculator)  
  56.     {  
  57.         bind_add(pCalculator, &Calculator::Add);  
  58.         bind_sub(pCalculator, &Calculator::Sub);  
  59.         bind_Multi(pCalculator, &Calculator::Multi);  
  60.     }  
  61.   
  62.   
  63.     void ExecuteAdd(int nA, int nB)  
  64.     {  
  65.         int nSum = pAddFunc(nA, nB);  
  66.         printf("Sum=%d\n", nSum);  
  67.     }  
  68.   
  69.     void ExecuteSub(int nA, int nB)  
  70.     {  
  71.         int nSub = pSubFunc(nA, nB);  
  72.         printf("Sub=%d\n", nSub);  
  73.     }  
  74.   
  75.     void ExecuteMulti(int nA, int nB)  
  76.     {  
  77.         int nMulti = pMultiFunc(nA, nB);  
  78.         printf("Multi=%d\n", nMulti);  
  79.     }  
  80.       
  81. private:  
  82.     AddFunc     pAddFunc;  
  83.     SubFunc     pSubFunc;  
  84.     MultiFunc   pMultiFunc;  
  85. };  
  86.   
  87.   
  88. int main(int argc, char* argv[])  
  89. {  
  90.     Calculator calculator;                  //被绑定对象声明  
  91.     CalcHander calcHander;                  //主动绑定的对象声明  
  92.     calcHander.Init(&calculator);           //函数绑定  
  93.     //执行函数,调用绑定函数  
  94.     calcHander.ExecuteAdd(200, 100);        //300   相当于调用  calculator.Add(200, 100);  
  95.     calcHander.ExecuteSub(300, 100);        //200   相当于调用  calculator.Sub(300, 100);  
  96.     calcHander.ExecuteMulti(50, 20);        //1000  相当于调用  calculator.Multi(50, 20);  
  97.   
  98.     return 0;  
  99. }  

转载地址:http://cooker.iteye.com/blog/1176141






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值