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

介紹一個C++中非常有用的設(shè)計模式

開發(fā) 后端
假設(shè)我們在開發(fā)一個SDK,或者設(shè)計某個模塊,需要暴露出去一個MyClass.h頭文件,并向用戶提供func1和func2兩個功能。

[[437509]]

本文轉(zhuǎn)載自微信公眾號「程序喵大人」,作者程序喵大人。轉(zhuǎn)載本文請聯(lián)系程序喵大人公眾號。

大家好,今天介紹一個C++中非常常用的模式:pimpl

至于它有什么作用,直接看代碼:

  1. // MyClass.h 
  2.  
  3. class MyClass { 
  4. public
  5.     void func1(); 
  6.     void func2(); 
  7.  
  8. private: 
  9.     void func3(); 
  10.     void func4(); 
  11.  
  12.     int a; 
  13.     int b; 
  14. }; 

假設(shè)我們在開發(fā)一個SDK,或者設(shè)計某個模塊,需要暴露出去一個MyClass.h頭文件,并向用戶提供func1和func2兩個功能。

但是MyClass中還有一些private函數(shù)和字段,這些函數(shù)和字段我們本意可能是不想被用戶知道,因為可能里面有些隱私內(nèi)容,用戶有可能通過這些private方法和字段就能猜到我們的架構(gòu)及實現(xiàn)。

這也是我們平時設(shè)計模塊需要注意的一點:只暴露出該暴露的東西。

那怎么做呢?答案就是pimpl模式。

可以這樣:

  1. // MyClass.h 
  2.  
  3. class MyClass { 
  4. public
  5.     void func1(); 
  6.  
  7.     void func2(); 
  8.  
  9. private: 
  10.     class impl; 
  11.     impl* pimpl; 
  12. }; 
  13.  
  14. // MyClass.cc 
  15. class MyClass::impl { 
  16. public
  17.     void func1(); 
  18.     void func2(); 
  19.  
  20. private: 
  21.     void func3(); 
  22.     void func4(); 
  23.  
  24.     int a; 
  25.     int b; 
  26. }; 
  27.  
  28. MyClass::MyClass() { 
  29.     pimpl = new impl; 
  30.  
  31. void MyClass::func1() { 
  32.     pimpl->func1(); 

將類的private屬性隱藏進一個內(nèi)部類,然后通過一個指針訪問(提前聲明)它的接口。在頭文件中只暴露出應(yīng)該暴露的功能,然后持有一個Impl的指針,而Impl則具體在MyClass.cc中定義,用戶什么都看不到。然后所有的功能都通過Impl完成。頭文件里的Impl的指針也可以通過智能指針(unique_ptr)來代替,但這不是本文的重點。

再總結(jié)一下pimpl模式的優(yōu)點:

  • 非常適合隱藏private實現(xiàn):如果想要在頭文件中暴露public接口,但又不想暴露private實現(xiàn)的細節(jié),則可以使用pimpl模式來隱藏細節(jié)。
  • pimpl模式也被稱為編譯防火墻,是一種用來減少編譯時間的方法。通常來講,如果頭文件里的某些內(nèi)容變更了,意味著所有引用該頭文件的代碼都要被重新編譯,即使變更的是無法被用戶類訪問的私有成員。將這部分代碼從被引用多次的頭文件里移除到只被引用編譯一次的源文件中,更改此文件就不會付出太長的編譯時間。

大家怎么看?

參考資料

https://en.cppreference.com/w/cpp/language/pimpl

 

責(zé)任編輯:武曉燕 來源: 程序喵大人
相關(guān)推薦

2011-07-07 17:16:43

PHP

2021-10-30 18:59:15

Python

2021-06-28 13:45:10

KTorrentBitTorrentLinux

2020-10-29 10:00:55

Python函數(shù)文件

2015-08-12 11:09:42

開發(fā)者設(shè)計原則

2017-08-02 13:32:18

編程Java程序片段

2023-02-19 15:22:22

React技巧

2009-03-24 14:23:59

PHP類庫PHP開發(fā)PHP

2022-09-02 23:08:04

JavaScript技巧開發(fā)

2023-06-13 15:15:02

JavaScript前端編程語言

2018-08-03 10:02:05

Linux命令

2013-11-05 10:03:22

Eclipse功能

2013-06-14 14:57:09

Java基礎(chǔ)代碼

2013-08-21 10:31:22

HTML5工具

2013-08-12 15:00:24

LinuxLinux命令

2021-03-09 09:14:27

ES2019JavaScript開發(fā)

2022-06-27 19:01:04

Python應(yīng)用程序數(shù)據(jù)

2009-02-09 11:20:06

Windows7Windows

2013-08-13 10:46:51

LinuxLinux命令

2010-07-30 09:07:12

PHP函數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品亚洲一区 | 一区二区三区精品视频 | 国产亚洲人成a在线v网站 | 日韩一区二区在线看 | 在线观看国产www | 亚洲精品www | 精品亚洲一区二区 | 四虎永久免费在线 | 亚洲精品亚洲人成人网 | 欧美激情久久久 | 国产精品视频免费观看 | 91在线看视频 | 国产 亚洲 网红 主播 | 久久久久久久久中文字幕 | 欧美日韩亚洲国产 | 色偷偷噜噜噜亚洲男人 | av中文字幕在线观看 | 色综合久久88色综合天天 | 亚洲男人网 | 欧美乱淫视频 | 日韩精品久久一区二区三区 | 波多野结衣av中文字幕 | 羞羞视频网 | 国产做a爱片久久毛片 | 亚洲一区二区三区四区五区中文 | 亚洲国产一区二区三区四区 | 中文字幕亚洲精品 | 美女日皮网站 | 亚洲欧美中文日韩在线v日本 | 国产精品一区二区在线 | av黄色在线 | 超碰在线97国产 | 久久国内 | 国产日韩精品视频 | 亚洲精久| 国产精品无码永久免费888 | 久久久国产一区 | av手机在线免费观看 | 色婷婷av一区二区三区软件 | 国产在线a视频 | 一区二区激情 |