首页 / 软件开发 / C++ / 在C++中实现C#的delegate机制
在C++中实现C#的delegate机制2010-06-12 vckbase 许培由于这段时间较忙,自从上次我发布了一个供初学者学习的“MFC”程序后,就没怎么写文章了。这段时间在忙新的项目,项目逻辑还算复杂,用了好多有闪光点的技术,下面我要讨论的是闪光点之一:在C++中实现C#的delegate机制。用过C#的朋友都觉得C#的确是个好语言,但有时由于特殊需要,不得不用C++,在C++中要想实现C#中的Thread等也是可行的,不过代码要稍复杂。以例子来说明:class Sdk
{
public:
void DoSomething();
};
class client
{
public:
Sdk m_sdk;
void DoSomething{}
{
m_sdk.DoSomething();
}
void OnMessage()
{
//
}
}
这个例子比较简单,Sdk用来实现某个功能,client是客户程序,要想在m_sdk做处理的时候能发送通知到client,有几个方法可以实现, 其一是发线程消息,其一是回调,但传统的回调对面向对象的支持并不好,这就是实现delegate的出发点。 下面是一个实现:class Delegate
{
public:
virtual ~Delegate(void){ }
virtual void operator()(void) = 0;
};
template <typename C>
class DelegateImpl : public Delegate
{
private:
typedef void (C::*F)(void);
C* m_class;
F m_fun;
public:
DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }
virtual void operator()(void)
{
if(m_class)
return (m_class-> *m_fun)();
}
};