在C++中实现C#的委托
2013-02-01 14:02
351 查看
通过研究,这两天写了一个C++ 的Delegate。关键调用部分使用汇编写成,效率是可以保证的。同时支持32位和64位系统。
支持“+=”操作符构造委托链。
但是,目前不支持将“虚函数”作为委托的目标函数。普通成员函数和静态成员函数都可以的。
目前也不支持异步的委托。
基本用法如下:
(其实我是重写了这文章中的例子:http://blog.csdn.net/cjl5678/article/details/7649686)
希望大家多多指教!
委托类Tron_Delegate的实现原理与代码下载位于:
http://www.winsxs.org/?OtherTech/thread-14-1-1
编译源码时,需要使用 NASM.exe,可以在其官方网站下载
http://www.nasm.us/
支持“+=”操作符构造委托链。
但是,目前不支持将“虚函数”作为委托的目标函数。普通成员函数和静态成员函数都可以的。
目前也不支持异步的委托。
基本用法如下:
(其实我是重写了这文章中的例子:http://blog.csdn.net/cjl5678/article/details/7649686)
class CKeepManager { public: CKeepManager() { } void KeepPet(char* name,Tron_Delegate &MethodOfKeepPets) { MethodOfKeepPets(this,1,(void**)&name);//通过重载“()”运算符实现。第一个参数是sender,就是C#中,事件回调函数中的那个参数sender。在这里,指明此回调的来源,就是当前对象本身。 } ////////////////////////////////////////////////////////////////////////// void KeepDogs(void* pSource,int argc,void **argv) { char* name=(char*)argv[0]; printf("%s, 需要到商店A买狗粮\n",name); } void KeepCats(void* pSource,int argc,void **argv) { char* name=(char*)argv[0]; printf("%s, 需要到商店B买猫粮\n",name); } }; int main(int argc, char* argv[]) { CKeepManager KM; Tron_Delegate methodOfKeepPets(&KM,&CKeepManager::KeepDogs);//将对象实例与对象方法,关联到“委托实例”中。 //在这个例子中,有点特殊,sender与接收者都是KM对象。 KM.KeepPet("养狗",methodOfKeepPets);//将方法设置成了一个参数,传入后调用 //如果你“养猫”了,就可以这样写 methodOfKeepPets=Tron_Delegate(&KM,&CKeepManager::KeepCats); KM.KeepPet("养猫",methodOfKeepPets);//将方法设置成了一个参数,传入后调用 }
希望大家多多指教!
委托类Tron_Delegate的实现原理与代码下载位于:
http://www.winsxs.org/?OtherTech/thread-14-1-1
编译源码时,需要使用 NASM.exe,可以在其官方网站下载
http://www.nasm.us/
相关文章推荐
- C++ 0x 使用可变参数模板类 实现 C# 的委托机制
- 用C++实现C#中的委托和事件
- 用 C++ 实现 C# 中的 委托/事件 (2-delegate event functor)
- 用 C++ 实现 C# 中的 委托/事件 (4-functor1)
- 用 C++ 实现 C# 中的 委托/事件 (5-functor2)
- 用C++实现C#中的委托/事件(标准C++之升级版)
- 用 C++ 实现 C# 中的 委托/事件 (1-delegateEMU.cpp)
- C#委托的C++实现
- C#中用委托实现C++的回调函数
- (转)C#的委托机制的C++的一种实现
- C#的委托机制的C++的一种实现DIY版
- C#中用委托实现C++的回调函数
- C#实现的几种委托方式介绍
- C++用纯虚函数实现协议委托的例子
- c#中实现c/c++的__Line__和__FILE__功能
- C#中利用委托实现多线程跨线程操作
- C++中const的实现细节介绍(C,C#同理)
- [通用技术]在不同语言中用协程实现全排列算法(C++/Lua/Python/C#)
- Singleton模式在C#与C++中的实现
- [导入]C#委托的具体实现方法