C++ 委托 fastdelegate使用,实现类函数回调绑定
2016-10-25 16:09
1496 查看
C++代码
#include <stdio.h>
#include "fastdelegate.h"
///////////////////////////////
//被委托绑定的类成员函数
class Calculator
{
public:
int Add(int nA, int nB)
{
return nA + nB;
}
int Sub(int nA, int nB)
{
return nA - nB;
}
int Multi(int nA, int nB)
{
return nA * nB;
}
};
/////////////////////////////////////////////////////////////////
//定义函数指针
typedef fastdelegate::FastDelegate2<int, int, int> AddFunc;
typedef fastdelegate::FastDelegate2<int, int, int> SubFunc;
typedef fastdelegate::FastDelegate2<int, int, int> MultiFunc;
//实现绑定到处理类
class CalcHander
{
public:
template <class X, class Y, class Param1, class Param2, class RetType>
void bind_add(Y* x, RetType (X::*func)(Param1 p1, Param2 p2))
{
pAddFunc = fastdelegate::MakeDelegate(x, func);
}
template <class X, class Y, class Param1, class Param2, class RetType>
void bind_sub(Y* x, RetType (X::*func)(Param1 p1, Param2 p2))
{
pSubFunc = fastdelegate::MakeDelegate(x, func);
}
template <class X, class Y, class Param1, class Param2, class RetType>
void bind_Multi(Y* x, RetType (X::*func)(Param1 p1, Param2 p2))
{
pMultiFunc = fastdelegate::MakeDelegate(x, func);
}
public:
void Init(Calculator *pCalculator)
{
bind_add(pCalculator, &Calculator::Add);
bind_sub(pCalculator, &Calculator::Sub);
bind_Multi(pCalculator, &Calculator::Multi);
}
void ExecuteAdd(int nA, int nB)
{
int nSum = pAddFunc(nA, nB);
printf("Sum=%d\n", nSum);
}
void ExecuteSub(int nA, int nB)
{
int nSub = pSubFunc(nA, nB);
printf("Sub=%d\n", nSub);
}
void ExecuteMulti(int nA, int nB)
{
int nMulti = pMultiFunc(nA, nB);
printf("Multi=%d\n", nMulti);
}
private:
AddFunc pAddFunc;
SubFunc pSubFunc;
MultiFunc pMultiFunc;
};
int main(int argc, char* argv[])
{
Calculator calculator; //被绑定对象声明
CalcHander calcHander; //主动绑定的对象声明
calcHander.Init(&calculator); //函数绑定
//执行函数,调用绑定函数
calcHander.ExecuteAdd(200, 100); //300 相当于调用 calculator.Add(200, 100);
calcHander.ExecuteSub(300, 100); //200 相当于调用 calculator.Sub(300, 100);
calcHander.ExecuteMulti(50, 20); //1000 相当于调用 calculator.Multi(50, 20);
return 0;
}
转载地址:http://cooker.iteye.com/blog/1176141
#include <stdio.h>
#include "fastdelegate.h"
///////////////////////////////
//被委托绑定的类成员函数
class Calculator
{
public:
int Add(int nA, int nB)
{
return nA + nB;
}
int Sub(int nA, int nB)
{
return nA - nB;
}
int Multi(int nA, int nB)
{
return nA * nB;
}
};
/////////////////////////////////////////////////////////////////
//定义函数指针
typedef fastdelegate::FastDelegate2<int, int, int> AddFunc;
typedef fastdelegate::FastDelegate2<int, int, int> SubFunc;
typedef fastdelegate::FastDelegate2<int, int, int> MultiFunc;
//实现绑定到处理类
class CalcHander
{
public:
template <class X, class Y, class Param1, class Param2, class RetType>
void bind_add(Y* x, RetType (X::*func)(Param1 p1, Param2 p2))
{
pAddFunc = fastdelegate::MakeDelegate(x, func);
}
template <class X, class Y, class Param1, class Param2, class RetType>
void bind_sub(Y* x, RetType (X::*func)(Param1 p1, Param2 p2))
{
pSubFunc = fastdelegate::MakeDelegate(x, func);
}
template <class X, class Y, class Param1, class Param2, class RetType>
void bind_Multi(Y* x, RetType (X::*func)(Param1 p1, Param2 p2))
{
pMultiFunc = fastdelegate::MakeDelegate(x, func);
}
public:
void Init(Calculator *pCalculator)
{
bind_add(pCalculator, &Calculator::Add);
bind_sub(pCalculator, &Calculator::Sub);
bind_Multi(pCalculator, &Calculator::Multi);
}
void ExecuteAdd(int nA, int nB)
{
int nSum = pAddFunc(nA, nB);
printf("Sum=%d\n", nSum);
}
void ExecuteSub(int nA, int nB)
{
int nSub = pSubFunc(nA, nB);
printf("Sub=%d\n", nSub);
}
void ExecuteMulti(int nA, int nB)
{
int nMulti = pMultiFunc(nA, nB);
printf("Multi=%d\n", nMulti);
}
private:
AddFunc pAddFunc;
SubFunc pSubFunc;
MultiFunc pMultiFunc;
};
int main(int argc, char* argv[])
{
Calculator calculator; //被绑定对象声明
CalcHander calcHander; //主动绑定的对象声明
calcHander.Init(&calculator); //函数绑定
//执行函数,调用绑定函数
calcHander.ExecuteAdd(200, 100); //300 相当于调用 calculator.Add(200, 100);
calcHander.ExecuteSub(300, 100); //200 相当于调用 calculator.Sub(300, 100);
calcHander.ExecuteMulti(50, 20); //1000 相当于调用 calculator.Multi(50, 20);
return 0;
}
转载地址:http://cooker.iteye.com/blog/1176141
相关文章推荐
- MFC使用CEF并实现js与C++交互功能,解决Render进程中OnContextCreated绑定与OnWebKitInitialized的js扩展无法回调问题
- c++高效委托的实现(fast delegate---简单、高效、跨平台)
- MFC使用CEF并实现js与C++交互功能,解决Render进程中OnContextCreated绑定与OnWebKitInitialized的js扩展无法回调问题
- 使用蓝图(Blueprint)绑定多播委托(Multicast Delegate)【UE4】【C++】
- C++中实现委托(Delegate)
- 用 C++ 实现 C# 中的 委托/事件 (1-delegateEMU.cpp)
- C#_delegate - 用委托实现事件,Display和Log类都使用Clock对象
- 在C++中使用事件回调机制(通过Observer模式、函数指针等实现)
- 在C++中实现委托(Delegate)
- C++中实现委托(Delegate)
- 使用委托实现同步回调与异步回调
- c++实现回调函数及使用方法
- C++ 0x 使用可变参数模板类 实现 C# 的委托机制
- C#中使用托管C++类,委托调用,以供托管C++类的成员函数回调的实现方式
- 使用Visual C++ Extensions实现ADO数据绑定
- C++ 11中使用lambda表达式实现回调
- 使用c++的成员指针实现类似Borland VCL组件的事件回调
- c++ fast Delegate 实现代码
- 【转载】C++中实现委托(Delegate)
- 使用C++委托实现全方向的摇杆