`

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;
}

分享到:
评论

相关推荐

    c++类成员函数作为回调函数

    然而,通过一些技巧和设计模式,我们可以实现类成员函数作为回调函数。 1. **静态成员函数作为回调** 静态成员函数不与任何对象实例绑定,因此它们可以直接作为回调函数。但是,由于它们无法访问类的非静态成员,...

    APIHook、InlineHook库,使用C++11编写,可将回调函数绑定到类成员函数

    本库利用C++11的新特性,提供了一种优雅的方式来实现这些功能,并允许将回调函数直接绑定到类成员函数。 APIHook技术主要涉及到动态改变API调用的过程。它通常通过在调用API函数之前插入自定义代码来实现,使得原本...

    C++ 回调函数

    在C++中,除了使用函数指针,还可以使用成员函数指针或者std::function来实现回调。成员函数指针适用于类的成员函数作为回调的情况,而std::function则提供了更灵活的回调机制,可以存储任何可调用对象,包括普通...

    非托管C++委托实现

    通过上述知识点的综合运用,非托管C++环境下的委托实现可以提供一种类似于.NET委托的功能,让代码能够更加灵活地处理回调和事件。这种实现方式对于那些需要在C++环境中实现事件驱动或回调机制的项目来说是非常有价值...

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

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

    C++实现的简单的回调函数

    理解并熟练运用函数指针、函数对象、lambda表达式以及成员函数回调,能帮助开发者编写出更加灵活和高效的代码。通过实践和学习`SimpleCallBackExamples`中的案例,你可以加深对C++回调函数的理解,并将其应用于实际...

    回调函数作用

    "回调函数作用" 回调函数是指在程序中某个函数可以通过将其地址传递给调用者来实现调用的函数。在本文中,我们将讨论函数指针的...函数指针是实现回调函数的关键,需要正确地声明和使用函数指针来实现回调函数的调用。

    成员函数指针与高性能的C++委托

    成员函数指针提供了一种方法,使得可以在运行时动态地调用类的成员函数,这对于实现诸如事件处理机制或回调机制等非常有用。 #### 实现高性能的C++委托 **委托**在C++中通常是指一种能够存储并执行函数的对象。它...

    VC++ 回调函数使用实例

    2. **声明回调函数的使用**:接下来,在需要使用回调函数的类或函数中,声明一个接收回调函数参数的函数。例如: ```cpp void ExecuteWithCallback(CallbackType callback) { // 在这里执行某些操作,并在适当的...

    c++回调示例(初级)

    在这个初级示例中,我们将探讨三种主要的回调实现方式:普通函数回调、静态成员函数回调以及非静态成员函数回调。 ### 1. 普通函数回调 普通函数回调是最基础的形式,它涉及将一个普通的、非成员函数的指针作为...

    回调函数演示

    可以使用`std::bind`或`std::function`来绑定类的成员函数和对象实例,使其能作为回调函数使用。 标签中的"VC 回调函数"强调了在VC++环境下,回调函数常常与Windows API结合使用。例如,当我们处理Windows消息循环...

    socket网络通信,c++委托,绑定事件

    FastDelegate是C++中一个高效的委托实现,它支持单个和多个函数调用,且具有轻量级、类型安全和性能优异的特点。使用FastDelegateBind,我们可以轻松地将函数或成员函数绑定到特定的对象上,实现事件驱动编程。 ...

    C#调C++传入委托(回调),获取结构体数据

    本项目“C#调用C++传入委托(回调)并获取结构体数据”提供了一个实例,演示了如何在C#应用中通过托管代码调用非托管的C++代码,并通过委托实现回调机制,同时传递和接收结构体数据。以下将详细介绍这一过程的关键...

    C++回调函数测试例子

    回调函数是C++实现函数式编程风格的关键要素之一,它使得代码更加灵活和可重用。 回调函数的基本概念: 1. **定义**:回调函数是一个可以在其他函数执行过程中被调用的函数。它作为一个参数传递给另一个函数,并在...

    用C++进行函数式编程

    这些匿名函数通常用于函数参数中,作为回调函数,从而减少全局变量的使用,增强了代码的局部性和清晰度。 - **std::function**:`std::function`是一个通用的目标类型,可以存储、复制函数对象,包括普通函数、成员...

    SDK和成员函数作为回调函数demo

    3. **使用仿函数(Functor)或std::shared_ptr包装成员函数**:在某些情况下,可以创建一个仿函数类或者使用`std::shared_ptr`来保存对象实例和成员函数信息,这样就可以将整个对象作为回调参数传递。 ```cpp #...

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

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

    回调函数的内容,回调函数简介

    在C++中,定义一个回调函数通常是通过函数指针来实现的。例如,下面的代码展示了如何定义一个空类型的函数指针以及如何将其绑定到一个具体的函数上: ```c++ typedef void(*f1)(); // 定义一个无返回值、无参数的...

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

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

Global site tag (gtag.js) - Google Analytics