簡體   English   中英

僅包含.h文件中私有數據的標頭

[英]Including headers just for private data in a .h file

我有一個在class.cppclass.h定義的類。 該類使用一些結構/類/類型/在stuff.h (當然, stuff.cpp )中定義的私有成員和方法。 我的主程序是在main.cpp#include class.h ,但不關心stuff.h任何stuff.h 如果它有所不同,則應該動態加載class.cp (.dll / .so)。
理想情況下,我希望將stuff.h只包含在class.cppstuff.cpp只鏈接到這個文件,因為它們只會導致main.cpp名稱空間污染,並且通過鏈接到最終程序會產生額外的膨脹。
問題是,我必須包括stuff.hclass.h ,因為它是定義在使用private:我的課,這是所有的一部分class.h 因為main.cpp class.h ,所以它也得到了stuff.h

我希望這很清楚。 在C#中,這可以通過部分類來解決。 我將如何在C ++中執行此操作?

您可以使用pImpl aka Opaque Pointers在C ++中執行此操作,其中您公開的類只有一個屬性,這是一個部分定義的結構(有時人們使用void *而不是相同的efefct)。

部分定義的結構,然后在你的stuff.cpp完全定義,一切都按預期工作 - 唯一的障礙是你需要確保你的構造函數和析構函數new /刪除內部實現,你需要特殊復制構造函數和賦值運算operator=操作operator= - 大多數人選擇只復制constrctor和賦值運算符,以便編譯器在使用它們時會反對。

看起來你需要Pimpl Idiom Pimpl的主要思想是你使用實現轉發聲明類而不是包含它的定義。 這允許您刪除頭文件中實現的依賴性,這通常會導致編譯速度加快,尤其是在大型項目上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM