[英]Including headers just for private data in a .h file
我有一個在class.cpp
和class.h
定義的類。 該類使用一些結構/類/類型/在stuff.h
(當然, stuff.cpp
)中定義的私有成員和方法。 我的主程序是在main.cpp
, #include
class.h
,但不關心stuff.h
任何stuff.h
。 如果它有所不同,則應該動態加載class.cp
(.dll / .so)。
理想情況下,我希望將stuff.h
只包含在class.cpp
而stuff.cpp
只鏈接到這個文件,因為它們只會導致main.cpp
名稱空間污染,並且通過鏈接到最終程序會產生額外的膨脹。
問題是,我必須包括stuff.h
在class.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.