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

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

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

[[437509]]

本文轉載自微信公眾號「程序喵大人」,作者程序喵大人。轉載本文請聯系程序喵大人公眾號。

大家好,今天介紹一個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. }; 

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

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

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

那怎么做呢?答案就是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屬性隱藏進一個內部類,然后通過一個指針訪問(提前聲明)它的接口。在頭文件中只暴露出應該暴露的功能,然后持有一個Impl的指針,而Impl則具體在MyClass.cc中定義,用戶什么都看不到。然后所有的功能都通過Impl完成。頭文件里的Impl的指針也可以通過智能指針(unique_ptr)來代替,但這不是本文的重點。

再總結一下pimpl模式的優點:

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

大家怎么看?

參考資料

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

 

責任編輯:武曉燕 來源: 程序喵大人
相關推薦

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函數文件

2015-08-12 11:09:42

開發者設計原則

2017-08-02 13:32:18

編程Java程序片段

2023-02-19 15:22:22

React技巧

2009-03-24 14:23:59

PHP類庫PHP開發PHP

2022-09-02 23:08:04

JavaScript技巧開發

2018-08-03 10:02:05

Linux命令

2023-06-13 15:15:02

JavaScript前端編程語言

2013-11-05 10:03:22

Eclipse功能

2013-08-21 10:31:22

HTML5工具

2013-06-14 14:57:09

Java基礎代碼

2013-08-12 15:00:24

LinuxLinux命令

2021-03-09 09:14:27

ES2019JavaScript開發

2022-06-27 19:01:04

Python應用程序數據

2009-02-09 11:20:06

Windows7Windows

2013-08-13 10:46:51

LinuxLinux命令

2010-07-30 09:07:12

PHP函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本a视频 | 色婷婷综合久久久中字幕精品久久 | 亚洲福利在线观看 | 午夜免费在线观看 | 日韩在线小视频 | 91在线精品一区二区 | 免费在线观看成人 | 91精品亚洲 | 亚洲在线| 亚洲成人精品在线 | 91文字幕巨乱亚洲香蕉 | 观看av | www.日本在线观看 | 欧美性久久 | 蜜桃av人人夜夜澡人人爽 | 欧美三区在线观看 | 国产不卡在线观看 | 另类视频在线 | 一区二区三区四区不卡视频 | 性生生活大片免费看视频 | 国产欧美日韩综合精品一区二区 | 亚洲在线一区 | 在线日韩欧美 | 欧美视频在线观看 | 欧美中文一区 | 天天天操 | 日日日日操 | 亚洲人人 | 欧美激情国产精品 | 中文字幕日韩在线观看 | 亚洲成人在线免费 | 91夜色在线观看 | 亚洲444kkkk在线观看最新 | 青青草网站在线观看 | 亚洲 欧美 日韩 在线 | 国产偷录叫床高潮录音 | 国产999精品久久久影片官网 | 黄色一级大片在线免费看产 | 看一级毛片 | 国产精品高潮呻吟 | www亚洲精品 |