在C++中实现C#的delegate机制[VC/C++编程]
本文“在C++中实现C#的delegate机制[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
由于这段时间较忙,自从上次我公布了一个供初学者学习的“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)();
}
};
以上是“在C++中实现C#的delegate机制[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |