深度剖析C++语言特点

C++作为一种语言,大多数的人都是把它默认为面向对象的支持,认为他就是C语言的替代品,一种延伸而已,而事际上,C++与C是完全不同的语言。用过C++语言的朋友都觉得C++语言的确是个好语言。

创新互联提供高防服务器租用、云服务器、香港服务器、雅安服务器托管

但有时由于特殊需要,不得不用C++,在C++中要想实现C#中的Thread等也是可行的,不过代码要稍复杂:

 
 
 
  1. //delegate 0  
  2.   #define DEFINE_DELEGATE(NAME, R)\  
  3.   class NAME##Delegate\  
  4.   {\  
  5.   public:\  
  6.   virtual ~NAME##Delegate(void){ }\  
  7.   virtual R operator()(void) = 0;\  
  8.   };\  
  9.   template\  
  10.   class NAME##DelegateImpl : public NAME##Delegate\  
  11.   {\  
  12.   private:\  
  13.   typedef R (C::*F)(void);\  
  14.   C* m_class;\  
  15.   F m_fun;\  
  16.   public:\  
  17.   NAME##DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }\  
  18.   virtual R operator()(void)\  
  19.   {\  
  20.   if(m_class)\  
  21.   return (m_class-*m_fun)();\  
  22.   }\  
  23.   };\  
  24.   template\  
  25.   NAME##Delegate* Make##NAME##Delegate(C* c, F f)\  
  26.   {\  
  27.   return new NAME##DelegateImpl(c, f);\  
  28.   }  
  29.   //////////////////////////////////////////////////////////////////////////  
  30.   //delegate 1  
  31.   #define DEFINE_DELEGATE(NAME, R, P1)\  
  32.   class NAME##Delegate\  
  33.   {\  
  34.   public:\  
  35.   virtual ~NAME##Delegate(void){ }\  
  36.   virtual R operator()(P1 p1) = 0;\  
  37.   };\  
  38.   template\  
  39.   class NAME##DelegateImpl : public NAME##Delegate\  
  40.   {\  
  41.   private:\  
  42.   typedef R (C::*F)(P1);\  
  43.   C* m_class;\  
  44.   F m_fun;\  
  45.   public:\  
  46.   NAME##DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }\  
  47.   virtual R operator()(P1 p1)\  
  48.   {\  
  49.   if(m_class)\  
  50.   return (m_class-*m_fun)(p1);\  
  51.   }\  
  52.   };\  
  53.   template\  
  54.   NAME##Delegate* Make##NAME##Delegate(C* c, F f)\  
  55.   {\  
  56.   return new NAME##DelegateImpl(c, f);\  
  57.   } 

这个例子比较简单C++语言用来实现某个功能,client是客户程序,要想在m_sdk做处理的时候能发送通知到client,有几个方法可以实现。其一是发线程消息,其一是回调,但传统的回调对面向对象的支持并不好,这就是实现delegate的出发点。 下面是一个实现: class Delegate

 
 
 
  1. DEFINE_DELEGATE(Open, void, int, string)  
  2.   class sdk  
  3.   {  
  4.   public:  
  5.   OpenDelegate* pEvent;  
  6.   sdk(): pEvent(NULL) { }  
  7.   void Open()  
  8.   {  
  9.   cout  
  10.   if(pEvent != NULL)  
  11.   (*pEvent)(100, "你好");  
  12.   }  
  13.   };  
  14.   class client  
  15.   {  
  16.   private:  
  17.   sdk m_sdk;  
  18.   public:  
  19.   client()  
  20.   {  
  21.   m_sdk.pEvent = MakeOpenDelegate(this, OnOpen2);  
  22.   }  
  23.   void Open()  
  24.   {  
  25.   m_sdk.Open();  
  26.   }  
  27.   void OnOpen()  
  28.   {  
  29.   cout  
  30.   }  
  31.   void OnOpen2(int t, string str)  
  32.   {  
  33.   cout  
  34.   }  
  35.   }; 

【编辑推荐】

  1. C与C++中标准输入实现方式上的一点区别
  2. C++编译器如何对Const常量进行分配存储空间
  3. C++类库设计的基本构思与方法
  4. 玩转C++语言的几种方法
  5. 如何更好的进行C++代码编制

当前文章:深度剖析C++语言特点
转载注明:http://www.shufengxianlan.com/qtweb/news31/235231.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联