成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解 Qt PIMPL模式

移動開發
本文介紹的是詳解 Qt PIMPL模式,這本文中,有接觸到了類,我們又溫習了一下,先來看內容。

詳解 Qt PIMPL模式是本文將要介紹的內容,不多說了,先來看內容。進行跨平臺的移植工作,這其中有些地方是無法完全移植過來的,所以:需要我們封裝一個接口類,在不同平臺下讓其有不同的實現。要做到這一點:有很多辦法,條件編譯啊之類的。但是如果有這種方法,說白了:其還是兩份代碼,僅僅是放到同一個文件中。參考Qt實現跨平臺的辦法,正好讀了一片這方面的文章,發現 PIMPL模式還是很適用的。

 

  1. //public.h      
  2. Class PrivateClass //前置聲明      
  3. Class PublicA:     
  4. {     
  5. Public:     
  6.    PublicA(); //如果私有實現類要調用位于公共類中的方法,則將該公共類指針傳給私有類構造函數       
  7.    ~PublicA();     
  8. Private:     
  9.     PrivateClass* iPoint;  //含有私有實現類的一個指針      
  10. Private:     
  11.     Friend class   PrivateClass;  //如果私有實現類要調用公開類的方法,則將之聲明為友類。      
  12. }     
  13.  
  14. //public.cpp      
  15. #include "public.h"      
  16. #ifdef Q_OS_SYMBIAN      
  17. #include "PrivateClass_symbian.h"      
  18. #else      
  19. #include "PrivateClass_win32.h"      
  20. #endif      
  21. PublicA::PublicA()     
  22. {      
  23.     #ifdef Q_OS_SYMBIAN                iPoint = PrivateClass::NewL(this);      
  24.     #else          
  25. iPointnew  PrivateClass( this );     
  26.     #endif      
  27. }    

如上:PIMPL是設計了對外公共類和私有實現類。 亦即:多個平臺對外的接口都是***的這個對外公共類,而不同平臺都有自己的私有實現類 。 

為了做到這一點,需要如下做:

1、在頭文件中:

(1)聲明一下私有類(不是include)

(2)含有該私有類的一個指針數據成員。

2、在cpp實現文件中:

(1)用條件編譯的方式決定到底include哪個私有實現類的頭文件。

(2)在對外公共類的函數實現中:也用條件編譯的方法決定調用哪一個私有實現類的函數。

為了實現這一點,要求:各個私有實現類的類名必須一樣!(文件名可以不一致)

以上是一個最簡單的模型,當然:如果私有實現類中想調用對外公共類的函數,則需要在公共類中做兩件事:

1、在其創建私有類時:通過參數的方式將自己的指針傳入到私有類中,從而讓私有類含有公共類的指針。

2、在公共類中將私有類聲明為:友元類。  (這樣擴大了私有類的訪問權限,這個可以依據實際情況來確定需要不需要)

事實上:這正是Qt用來對底層操作系統進行抽象的解決辦法,它使開發者無需關心每一個平臺的底層編程方法和各種限制。

針對qt開發而言:一般這些私有實現類都是針對不同平臺的,比如:symbian的一些系同級的函數,還有一些win特有的函數,這些都是無法做到跨平臺的,我們可以用PIMPL模式來進行抽象。此時上邊所說的條件編譯宏就是:不同平臺的宏了。同樣:還需要在pro中把針對不同平臺的私有實現文件放到平臺關鍵字中。

通常,如果公共類名為QMyClass ,那么:

私有類就被定義為QMyClassPrivate。

公共類的源文件和頭文件共享公共類名: qmyclass.h , qmyclass.cpp 。

私有類的頭文件和源文件名以 _p  結尾(比如 qmyclass_p.h ),除非該文件是一個平臺特定實現。

平臺特定實現的頭文件和源文件名中包括平臺名 – 如 qmyclass_symbian.cpp  (不必在結尾處添加 _p  ,因為已經暗示)。

小結:詳解 Qt PIMPL模式 的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-28 15:18:45

Qt 單例模式

2024-02-01 00:10:21

C++PIMPL編程

2011-06-24 10:05:51

QT 對象 父對象

2011-06-20 17:33:58

Qt MeegoTouch Maemo

2011-06-23 14:05:32

Qt 事件機制

2011-06-24 14:34:17

Qt 小票 打印

2011-06-14 11:48:38

Webkit QT

2011-06-20 14:27:57

Qt Embedded

2011-06-30 14:34:17

QT Tablewidge QTableWidg

2011-04-02 09:17:38

2011-06-24 10:54:34

Qt Mysql

2011-07-04 16:12:00

QT QWidget

2011-06-17 10:19:11

Qt QWidge QSetting

2011-06-17 09:58:26

Qt Chapter QObject

2011-06-24 12:58:49

Qt LineEdit

2011-07-04 17:18:23

Qt SQLite 數據庫

2011-06-24 15:30:22

QT 皮膚 QSS

2011-06-28 16:18:24

Qt QObject

2011-06-09 14:52:09

Pimpl機制

2021-06-29 08:54:23

設計模式代理模式遠程代理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久久久久久 | 日韩一区二区黄色片 | 美国一级黄色片 | 亚洲欧美一区二区在线观看 | 9191在线观看 | 久久久久久艹 | 日韩欧美国产一区二区 | 网站黄色在线免费观看 | 精品在线一区 | 国产精品久久久久久久久久久久冷 | 91精品国产777在线观看 | 久久久久久久久久久久久9999 | 国产精品久久亚洲7777 | 中文字幕免费观看 | 一级大黄 | 欧美日韩在线视频一区 | www.青青草| 日韩精品无码一区二区三区 | 欧美日韩在线综合 | 成av在线| 精品中文视频 | 久久精品成人热国产成 | 精品日韩 | 97在线观视频免费观看 | 精品欧美一区二区三区精品久久 | 欧美在线a| 正在播放一区二区 | 免费的黄色片子 | 国产成人黄色 | 中文字幕日韩在线观看 | 国产欧美视频一区二区 | 蜜臀网站 | 男插女下体视频 | 欧美1页| a级大片免费观看 | 成人中文字幕在线 | 亚洲欧美一区二区三区在线 | 91av视频在线观看 | av中文字幕在线观看 | 国产目拍亚洲精品99久久精品 | 欧美freesex黑人又粗又大 |