[英]typedef structs declared inside class or outside?
我正在創建一個名為ImageLoader的類,它將用於加載各種圖像格式。 對於各種圖像格式,使用某些結構。 例如,對於bmp文件,您有一個BITMAPFILEHEADER結構和另外兩個。
我想知道的是,當我將我的類定義放在頭文件中時,我是否將類typedefs作為類定義的一部分,或者它們是否應該在類定義之外分開?
我不確定,因為如果我只是聲明一個結構變量,這顯然會在類中發生,但因為我正在定義一個類型,我不確定它是否被認為是在類中定義類型的好設計。
我的一般規則是,如果它只與該類一起使用,那么在里面聲明它(它意味着所有權); 否則單獨聲明。
如果你從標題中省略所有內容,你會得到更好的封裝。 即使您的類的某些方法需要參數或返回結構類型,您也可能會使用前向聲明。
只有當它是公共接口的一部分時,才需要將它放在標題中。
至於它是否在課堂上,考慮它是否有用,或者它是否完全服從於課堂。 如果它可以獨立,它可能應該在它自己的標題中。
我不會說在類中聲明類型是一個糟糕設計的指標。 假設你提到的“設計”意味着“可讀性”,我會堅持一致,堅持以同樣的方式表達相同的關系。
否則,你不會因為嵌套類型的神聖憤怒而被打倒(考慮到SGI不是一個陰燃的隕石坑)。 這是以環境為中心的,因此除了根據您的要求定義的內容之外,沒有嚴格的規則。
如果客戶端可訪問性不是問題,我將大多數所有內容都聲明在標題中的適當范圍內,並記錄我的代碼的含義。 同樣,如果我沒有嚴格的使用/可讀性指南來強制執行。 如果我這樣做的話,我會選擇馬克的建議。
兩分錢:您可以嘗試枚舉圖像類型並使用一個公共結構來獲取配置數據,這樣您就可以證明在閉門造車中拉出其他所有內容。
BITMAPFILEHEADER是Win32 Platform SDK中定義的結構。 我不確定我是否理解你的要求和你的班級......
通常,如果要定義未向類的客戶端公開的結構,我將在類的私有部分或頭文件中的子命名空間Details
中定義它們,例如:
namespace YourCoolLibrary
{
namespace Details
{
struct SomeInternalStructure
{
...
};
} // namespace Details
class YourCoolClass
{
...
private:
Details::SomeInternalStructure m_something;
};
} // namespace YourCoolLibrary
甚至有更多的選擇。 如果你把它放在類中,你必須選擇它是公共的,保護的還是私有的,使類定義對於類的每個用戶都可見,只有派生類或沒有其他類。
如果您不需要類定義的詳細信息,我只會將前向聲明放入ImageLoader以使其更簡單。 然后內部類的完整定義進入實現文件。
我的經驗法則是盡可能將名稱設置為本地名稱,因此如果我在錯誤的位置意外使用它,編譯器會抱怨。
如果typedef
邏輯上屬於您正在創建的類,請將其放入; 如果它在全球范圍內有意義,請將其留在外面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.