在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++中非常有用的設計模式

汽車電子技術 ? 來源:程序喵大人 ? 作者:程序喵大人 ? 2023-02-21 14:21 ? 次閱讀

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

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

// MyClass.h


class MyClass {
public:
    void func1();
    void func2();


private:
    void func3();
    void func4();


    int a;
    int b;
};

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

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

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

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

可以這樣:

// MyClass.h


class MyClass {
public:
    void func1();


    void func2();


private:
    class impl;
    impl* pimpl;
};


// MyClass.cc
class MyClass::impl {
public:
    void func1();
    void func2();


private:
    void func3();
    void func4();


    int a;
    int b;
};


MyClass::MyClass() {
    pimpl = new impl;
}


void MyClass::func1() {
    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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C++
    C++
    +關注

    關注

    22

    文章

    2117

    瀏覽量

    74787
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1066

    瀏覽量

    47715
  • 頭文件
    +關注

    關注

    0

    文章

    26

    瀏覽量

    10033
  • func
    +關注

    關注

    0

    文章

    2

    瀏覽量

    1086
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    開發板里的CPLD原程序,一般廠商是不提供的,內部資料,非常有用

    本帖最后由 assingle 于 2011-2-18 14:03 編輯 開發板里的CPLD內部邏輯原理,一般廠商是不提供的,內部資料,非常有用,希望能給大家有參考作用,開發環境QUARTUS II 6.0,CPLD為EPM240T100C5N,超便宜,比EPM712
    發表于 02-18 14:02

    對新手非常有用的電子器件基礎資料

    本帖最后由 eehome 于 2013-1-5 09:56 編輯 對新手非常有用的電子器件基礎資料PCB打樣找華強 http://www.hqpcb.com/3 樣板2天出貨
    發表于 10-20 20:13

    03國賽控制類準備步驟,非常有用

    這是關于國賽準備的一些模塊原理圖以及相關PCB布線等的步驟,非常有用
    發表于 01-23 22:00

    MPLAB Harmony C++怎么使用

    MPLAB和諧文檔(在什么是MPLAB和諧?)“MPLA-和聲沒有用C++測試過,因此,沒有提供對這個編程語言的支持。”——對于2018來說非常令人難以置信。有人成功地使用C++和和聲
    發表于 09-20 09:40

    請問有沒有用C++開發STM32的

    我大學學的C++,相對C語言來說更喜歡C++語言,只是不知道有沒有用C++開發STM32程序的,不是指僅僅玩玩,而是有沒
    發表于 10-26 08:42

    CodeWarrior C and C++ and Assembly 語言參考設計

    本文是英文版的,介紹了CodeWarrior C and C++ and Assembly 語言參考設計,在您的設計中或許有用
    發表于 06-22 15:33 ?74次下載

    大話設計模式C++

    讓大家全方位傻瓜式學習大話設計模式C++
    發表于 07-13 15:11 ?9次下載

    Vim中默認未啟用但實際非常有用的選項

    Vim 作為一款功能強大、選項豐富的編輯器,為許多用戶所熱愛。本文介紹了一些在 Vim 中默認未啟用但實際非常有用的選項。雖然可以在每個 Vim 會話中單獨啟用,但為了創建一個開箱即用的高效編輯環境,還是建議在 Vim 的配置文件中配置這些命令。
    的頭像 發表于 09-25 17:54 ?5582次閱讀

    C++語言的基本構成詳細資料說明

    C++語言中的數據類型、運算、語句結構、數組、指針、函數是C++程序設計的基礎。掌握這些基本內容,對利用C++語言解決一般應用問題是非常必要和有用
    發表于 02-19 14:49 ?0次下載
    <b class='flag-5'>C++</b>語言的基本構成詳細資料說明

    C++常見設計模式解析與實現

    C++常見設計模式解析與實現說明。
    發表于 06-01 15:44 ?11次下載

    CC++混合編程是什么

    這篇文章講解的知識點很“小”,但是在CC++的混合編程中非常重要。因為我們在寫應用程序時,經常利用到第三方的程序。如果我們的代碼用C,但是第三方代碼是
    的頭像 發表于 02-14 13:48 ?2114次閱讀
    <b class='flag-5'>C</b>與<b class='flag-5'>C++</b>混合編程是什么

    17個非常有用的Python技巧

    Python 是一門非常優美的語言,其簡潔易用令人不得不感概人生苦短。在本文中,作者 Gautham Santhosh 帶我們回顧了 17 個非常有用的 Python 技巧,例如查找、分割和合并列表等。這 17 個技巧都非常簡單
    的頭像 發表于 04-10 14:28 ?693次閱讀

    一個簡單但非常有用的小前置放大器電路

    一個簡單但非常有用的小前置放大器電路可以通過連接幾個晶體管來構建。該裝置可輕松將 1mV 信號提升至 100mV 甚至更高。因此,它非常方便放大不能直接與功率放大器一起使用的極小信號。
    的頭像 發表于 06-10 17:27 ?1900次閱讀
    一個簡單但<b class='flag-5'>非常有用</b>的小前置放大器電路

    沒有什么是完美的,但FPGA可能非常有用

    FPGA是非常有用的器件,通常與ADI公司的ADC或功率IC等一起設計到客戶的設計中。FPGA 可以實現微控制器和所需的任何膠水邏輯。在這篇博客中,我將討論一些與功能安全和FPGA相關的問題。
    的頭像 發表于 06-29 10:28 ?1740次閱讀
    沒有什么是完美的,但FPGA可能<b class='flag-5'>非常有用</b>

    c++多行注釋快捷鍵

    C++中,多行注釋(也稱為塊注釋)是一種用于注釋大段代碼或多個語句的方法。當你希望暫時禁用一些代碼或者解釋特定部分代碼的作用時,多行注釋是非常有用的。 在C++中,多行注釋以 /* 開始,以
    的頭像 發表于 11-22 10:24 ?9375次閱讀
    主站蜘蛛池模板: 2018天天操夜夜操 | 欧美成人午夜毛片免费影院 | 青草91视频免费观看 | 亚洲色图 欧美 | 国产美女一区 | 亚洲色图国产精品 | 操的好爽视频 | 欧美伦理影院 | 67pao强力打造高清免费 | 一区二区3区免费视频 | 激情综合色综合啪啪开心 | 免费一级毛片视频 | 国产码一区二区三区 | 国产精品夜色7777青苹果 | 久久天天躁综合夜夜黑人鲁色 | 亚洲va久久久噜噜噜久久男同 | 午夜精品久久久久久99热7777 | 爱操成人网 | 色香天天 | avtt加勒比手机版天堂网 | 久久久久国产精品四虎 | 色中色在线视频 | 午夜一级毛片免费视频 | 末发育娇小性色xxxxx视频 | 黄色xxxx| 免费黄色一级毛片 | 在线观看免费观看 | 国产资源视频在线观看 | 国产精品一区电影 | 西西人体44rt高清午夜 | 黄色网址你懂得 | 五月婷婷激情综合网 | 免费在线色视频 | 中文字幕一区二区三区在线观看 | 国产handjob手交在线播放 | 最刺激黄a大片免费观看下截 | 国产精品成人四虎免费视频 | 中国一级生活片 | 李老汉的性生生活2 | 国产盗摄女厕美女嘘嘘 | 97天天操|