C++简易模仿C#Delegate机制
来源:互联网 发布:邮件 rss源码 编辑:程序博客网 时间:2024/06/06 00:57
嗯,最近公司要求用C#做个项目,可惜我以前没怎么学过,所以恶补了下C#相关知识。由于在项目中频繁用到delegate机制,但是初看起来有点蒙。经过自己反复推敲,我觉得大致上算理解了它的机制,于是我用C++写了一些代码来模仿C#Delegate运行机制。
代码如下:
/**********************************************this a project to lmitation the C# delegate ** **@author Kerwin **2012.3.20 **18:10 **********************************************/#include <iostream>#include <stdio.h>#include <vector>using namespace std;/** The base class of NoTypeDelegate and TypeDelegate*/class Delegate{public:virtual void Invoke() = 0;Delegate(){}virtual ~Delegate(){}};//class NoTypeDelegateclass NoTypeDelegate: public Delegate{public:NoTypeDelegate(void(*pfunc)(int),int iParam):Delegate(),m_pFunc(pfunc),m_iParam(iParam){}~NoTypeDelegate(){}void Invoke(){cout<<"NoTypeDelegate Invoke\r\n";m_pFunc(m_iParam);}private:void (*m_pFunc)(int);int m_iParam;};//TypeDelegatetemplate<typename T>class TypeDelegate : public Delegate{public:TypeDelegate(T& t,void(T::*pfunc)(int),int iParam):Delegate(),m_t(t),m_pFunc(pfunc),m_iParam(iParam){}~TypeDelegate(){}void Invoke(){cout<<"TypeDelegate Invoke\r\n";(m_t.*m_pFunc)(m_iParam);}private:void (T::*m_pFunc)(int);int m_iParam;T m_t;//T is a type,here as a class};//normal invoke functionvoid Test(int iParam){printf("Test Invoke %d\n",iParam);}//class TT class TT{public:void Test(int iParam){printf("TT::Test Invoke %d\n",iParam);}};int main(){NoTypeDelegate ntd(Test,1);TT t;// TT object to as class TypeDelegate member variableTypeDelegate<TT> td(t,TT::Test,2);vector<Delegate*> vecdelegate;vecdelegate.push_back(&ntd);vecdelegate.push_back(&td);typedef vector<Delegate*>::iterator pit;for(pit it = vecdelegate.begin(); it != vecdelegate.end(); it++){(*it)->Invoke();//RTTI function}return 0;}
- C++简易模仿C#Delegate机制
- C#中的Delegate机制(Delegate in C#)
- [object-c基础]delegate机制
- C#delegate的C++简易实现
- 【C++】C++简易实现C#的delegate
- Objective-C Cocoa的delegate机制解释
- C#-delegate
- Objective-C回调机制(delegate, protocol)
- Objective-C回调机制(delegate, protocol)
- Objective-C回调机制(delegate, protocol)
- c++list模仿
- C#-委托(delegate)
- C#-委托(delegate)
- delegate,C#,代理
- [C#] 委托delegate
- objective-c delegate
- objective-c - delegate
- Objective-C delegate理解
- Linux下使用Tomcat7搭建高性能Java服务器
- 第三节:Quartz 执行过程
- Android杂谈---读取XML资源
- 三对角阵的LU分解和三对角方程组的求解(C语言)
- 计算当前sql语句执行速度
- C++简易模仿C#Delegate机制
- 消息到达提醒功能
- 求解三对角方程组的追赶法(Matlab程序)
- Jacobi迭代法解线性方程组(C语言)
- 九九乘方表
- C语言时间处理函数strftime
- 高斯—赛德尔迭代法解线性方程组(C语言)
- HDU 2243
- 对称矩阵的LDLT分解(C语言)