搜索下载文件: fastdelegate.h
下载地址:
http://code.google.com/p/code-adintr-com/source/browse/trunk/mylib/aslib/utility/FastDelegate.h?r=4
#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;
}
分享到:
相关推荐
APIHook、InlineHook库,使用C++11编写,可将回调函数绑定到类成员函数。代码风格良好,适合学习。
c++11引入了std::bind及std::function,实现了函数的存储和绑定,即先将可调用的对象保存起来...定义了SignalObject信号类和SlotObject槽类,其中信号类中的 std::function(int)> _call就是要绑定的槽函数,即回调函数
函数指针 函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型变、字符型或数组等变量,而函数指针是指向函数。 函数指针可以像一般函数一样,用于调用函数、传递参数。 函数指针变量的声明: ...
假如你把A函数的指针当作参数传给B函数,然后在B函数中通过A函数传进来的这个指针调用A函数,这就是回调机制。B函数就是回调函数。 3.函数指针的使用 3.1函数指针声明 typedef 返回类型(*函数指针类型名)(函参...
halcon外触发get_framegrabber_callback注册回调函数方法,c#代码
2、需要使用者接收返回的回调函数标识来移除事件绑定(原因同上) 3、事件没有返回值,不支持回调函数优先级、条件回调等事件高级特性(比如返回所有处理结果中的大小值;只回调与指定参数匹配的事件处理函数...
为了达到简洁的目的,需要放弃一些特性: 1、不支持判断函数是否已经绑定过(因为std::function不提供比较方法,自己实现function的话代码又变多了) 2、需要使用者接收返回的回调函数标识来移除事件绑定(原因同上...
回调函数主要实现对当前连接的close;\ **②基于信号和管道的定时事件处理**:建立监听数据集(新连接会加入一个数据集和时间结点,新信息读入会读取数据集并修改时间结点),基于sigaction形式实现对信号和信号...
程序采用回调函数接收对方发来的UDP数据,并通过字符串的形式显示在接收窗口的便捷框中。UDP通信被封装成了类,方便初学者学习使用。c++代码实现。函数Socket套接字bind绑定IP地址和端口号。RecvThread线程实现数据...
这是一个使用C++开发的网络通信传输实例,以下是对其完整源码的描述,不包含具体的代码实现: 服务器端和客户端:该实例包含了...通过在服务器端使用多个线程或异步回调函数来处理客户端的请求,可以同时处理多个连接
4.8.4 重写回调方法 109 4.8.5 更新HelloJni Activity 110 4.9 小结 110 第5章 日志、调试及故障处理 111 5.1 日志 111 5.1.1 框架 111 5.1.2 原生日志API 112 5.1.3 受控制的日志 114 5.1.4 控制台日志 118...
用的回调函数定义为 C++ 类中的静态成员函数,然后仍然使用 C 接口来调用 GTK。如果你选择后一种方法,你可以把指向要操作的对象 3 / 258 的指针 (即所谓的 "this")作为回调函数的 data 参数。选择哪一种方法仅仅是...
由于编译后的名字不同,C++程序不能直接调 用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。 (4). switch()中不允许的数据类型是? 答:实型 4. 回答下面的问题(6分) (1).Void GetMemory(char...
10.如何定义和实现一个类的成员函数为回调函数? 如果类的成员函数是一个callback函数, 必须宣告它为"static",才能把C++ 编译器加诸于函数的一个隐藏参数this去掉。 11.C++里面是不是所有的动作都是main()引起...
) 智能指针的基本原理 智能指针其实是⼀个类,可以通过将普通指针作为参数传⼊智能指针的构造函数实现绑定。只不过通过运算符重载让它"假装"是⼀个指 针,也可以进⾏解引⽤等操作。既然智能指针是⼀个类,对象都...
Windows程序运行原理及程序编写流程,窗口产生过程,句柄原理,消息队列,回调函数,窗口关闭与应用程序退出的工作关系,使用VC++的若干小技巧,stdcall与cdecl调用规范的比较,初学者常犯错误及注意事项。...
函数调用的第一个参数是产生信号的widget组件(即按钮等窗口构件),而name则是希望捕获的信号或事件的名称,callback_func则是事件发生后所调用的回调函数名称,而第四个参数func_data则是传递给回调函数的参数。...
去掉TCPChannel的BuildPacket函数,改成直接由OnRecv回调函数返回实际数据 去掉UDPChannel的Response函数,改成直接由内部处理 2.2 修改TCPChannel类,实现同步调用接口 定义IRPC接口用来处理同步调用的被调用端...