深度剖析C++语言特点
C++作为一种语言,大多数的人都是把它默认为面向对象的支持,认为他就是C语言的替代品,一种延伸而已,而事际上,C++与C是完全不同的语言。用过C++语言的朋友都觉得C++语言的确是个好语言。
但有时由于特殊需要,不得不用C++,在C++中要想实现C#中的Thread等也是可行的,不过代码要稍复杂:
- //delegate 0
- #define DEFINE_DELEGATE(NAME, R)
- class NAME##Delegate
- {
- public:
- virtual ~NAME##Delegate(void){ }
- virtual R operator()(void) = 0;
- };
- template
- class NAME##DelegateImpl : public NAME##Delegate
- {
- private:
- typedef R (C::*F)(void);
- C* m_class;
- F m_fun;
- public:
- NAME##DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }
- virtual R operator()(void)
- {
- if(m_class)
- return (m_class-*m_fun)();
- }
- };
- template
- NAME##Delegate* Make##NAME##Delegate(C* c, F f)
- {
- return new NAME##DelegateImpl(c, f);
- }
- //////////////////////////////////////////////////////////////////////////
- //delegate 1
- #define DEFINE_DELEGATE(NAME, R, P1)
- class NAME##Delegate
- {
- public:
- virtual ~NAME##Delegate(void){ }
- virtual R operator()(P1 p1) = 0;
- };
- template
- class NAME##DelegateImpl : public NAME##Delegate
- {
- private:
- typedef R (C::*F)(P1);
- C* m_class;
- F m_fun;
- public:
- NAME##DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }
- virtual R operator()(P1 p1)
- {
- if(m_class)
- return (m_class-*m_fun)(p1);
- }
- };
- template
- NAME##Delegate* Make##NAME##Delegate(C* c, F f)
- {
- return new NAME##DelegateImpl(c, f);
- }
这个例子比较简单C++语言用来实现某个功能,client是客户程序,要想在m_sdk做处理的时候能发送通知到client,有几个方法可以实现。其一是发线程消息,其一是回调,但传统的回调对面向对象的支持并不好,这就是实现delegate的出发点。 下面是一个实现: class Delegate
- DEFINE_DELEGATE(Open, void, int, string)
- class sdk
- {
- public:
- OpenDelegate* pEvent;
- sdk(): pEvent(NULL) { }
- void Open()
- {
- cout
- if(pEvent != NULL)
- (*pEvent)(100, "你好");
- }
- };
- class client
- {
- private:
- sdk m_sdk;
- public:
- client()
- {
- m_sdk.pEvent = MakeOpenDelegate(this, OnOpen2);
- }
- void Open()
- {
- m_sdk.Open();
- }
- void OnOpen()
- {
- cout
- }
- void OnOpen2(int t, string str)
- {
- cout
- }
- };
- 上一篇:几分钟轻轻松松学好C++
- 下一篇:C++类包含函数说明