`
mylove2060
  • 浏览: 330873 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多
搜索下载文件: 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编写,可将回调函数绑定到类成员函数

    APIHook、InlineHook库,使用C++11编写,可将回调函数绑定到类成员函数。代码风格良好,适合学习。

    通过c++11的std::bind及std::function实现类方法回调,模拟Qt实现信号槽

    c++11引入了std::bind及std::function,实现了函数的存储和绑定,即先将可调用的对象保存起来...定义了SignalObject信号类和SlotObject槽类,其中信号类中的 std::function(int)&gt; _call就是要绑定的槽函数,即回调函数

    C++函数指针和回调函数使用解析

    函数指针 函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型变、字符型或数组等变量,而函数指针是指向函数。 函数指针可以像一般函数一样,用于调用函数、传递参数。 函数指针变量的声明: ...

    c++函数指针和回调函数示例

    假如你把A函数的指针当作参数传给B函数,然后在B函数中通过A函数传进来的这个指针调用A函数,这就是回调机制。B函数就是回调函数。 3.函数指针的使用 3.1函数指针声明 typedef 返回类型(*函数指针类型名)(函参...

    halcon外触发get_framegrabber_callback注册回调函数方法

    halcon外触发get_framegrabber_callback注册回调函数方法,c#代码

    C++中事件机制的简洁实现

     2、需要使用者接收返回的回调函数标识来移除事件绑定(原因同上)  3、事件没有返回值,不支持回调函数优先级、条件回调等事件高级特性(比如返回所有处理结果中的大小值;只回调与指定参数匹配的事件处理函数...

    C++中事件机制的简洁实现及需要放弃的特性

    为了达到简洁的目的,需要放弃一些特性: 1、不支持判断函数是否已经绑定过(因为std::function不提供比较方法,自己实现function的话代码又变多了) 2、需要使用者接收返回的回调函数标识来移除事件绑定(原因同上...

    基于C++实现的HTTP服务器改进版源码+项目使用说明+详细注释.zip

    回调函数主要实现对当前连接的close;\ **②基于信号和管道的定时事件处理**:建立监听数据集(新连接会加入一个数据集和时间结点,新信息读入会读取数据集并修改时间结点),基于sigaction形式实现对信号和信号...

    WinCe嵌入式系统UDP网络通信程序

    程序采用回调函数接收对方发来的UDP数据,并通过字符串的形式显示在接收窗口的便捷框中。UDP通信被封装成了类,方便初学者学习使用。c++代码实现。函数Socket套接字bind绑定IP地址和端口号。RecvThread线程实现数据...

    C++开发网络通信传输实例 完整源码

    这是一个使用C++开发的网络通信传输实例,以下是对其完整源码的描述,不包含具体的代码实现: 服务器端和客户端:该实例包含了...通过在服务器端使用多个线程或异步回调函数来处理客户端的请求,可以同时处理多个连接

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    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...

    GTK+2.0+中文教程.pdf

    用的回调函数定义为 C++ 类中的静态成员函数,然后仍然使用 C 接口来调用 GTK。如果你选择后一种方法,你可以把指向要操作的对象 3 / 258 的指针 (即所谓的 "this")作为回调函数的 data 参数。选择哪一种方法仅仅是...

    C/C++笔试题(附答案,华为面试题系列)

    由于编译后的名字不同,C++程序不能直接调 用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。 (4). switch()中不允许的数据类型是? 答:实型 4. 回答下面的问题(6分) (1).Void GetMemory(char...

    最新名企标准通用C++面试题,

    10.如何定义和实现一个类的成员函数为回调函数? 如果类的成员函数是一个callback函数, 必须宣告它为"static",才能把C++ 编译器加诸于函数的一个隐藏参数this去掉。 11.C++里面是不是所有的动作都是main()引起...

    C++智能指针:auto-ptr详解.pdf

    ) 智能指针的基本原理 智能指针其实是⼀个类,可以通过将普通指针作为参数传⼊智能指针的构造函数实现绑定。只不过通过运算符重载让它"假装"是⼀个指 针,也可以进⾏解引⽤等操作。既然智能指针是⼀个类,对象都...

    VC学习大纲 VC学习讲义

    Windows程序运行原理及程序编写流程,窗口产生过程,句柄原理,消息队列,回调函数,窗口关闭与应用程序退出的工作关系,使用VC++的若干小技巧,stdcall与cdecl调用规范的比较,初学者常犯错误及注意事项。...

    图片预览器

    函数调用的第一个参数是产生信号的widget组件(即按钮等窗口构件),而name则是希望捕获的信号或事件的名称,callback_func则是事件发生后所调用的回调函数名称,而第四个参数func_data则是传递给回调函数的参数。...

    IOCP_API(2.4)

    去掉TCPChannel的BuildPacket函数,改成直接由OnRecv回调函数返回实际数据 去掉UDPChannel的Response函数,改成直接由内部处理 2.2 修改TCPChannel类,实现同步调用接口 定义IRPC接口用来处理同步调用的被调用端...

Global site tag (gtag.js) - Google Analytics