簡體   English   中英

將兩個或多個 C++ 命名空間合並為一個

[英]Combine two or more C++ namespaces into one

首先,對不起我的英語。

好的,我正在編寫一個執行特定過程的程序。 這個過程需要定義一些類和函數。 所有這些都必須組織在塊中才能訪問它們。

我的第一個想法是使用命名空間(C++),得到這樣的東西:

namespace LoadSystem
{
   namespace ParseBlock1
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
   namespace ParseBlock2
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
}

所以,我正在閱讀以獲得最好的主意,這是否好。 我已經讀過我不能使用大量嵌套的命名空間,因此,就我而言,最低級別為兩個,如上所示。

我的目標是能夠將越來越多的ParseBlocks添加到LoadSystem命名空間中。 它將存儲在單個.h文件中,因此,將只有類的接口。 由於每個塊可以有很多類,我想將每個塊的定義拆分為其他.h文件,以盡可能保持主.h文件較小。

所以,我最后想到了定義一個文件block1.hblock2.h ,每個文件block1.h這樣的結構:

namespace LoadSystem
{
   namespace ParseBlock1
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
}

namespace LoadSystem
{
   namespace ParseBlock2
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
}

並將它們導入到load_system.h文件中。 因此,每次我需要添加另一個塊時,我都會編寫所需的文件,最后,我只需將新的blockX.h導入主load_system.h

然后,我必須能夠使用LoadSystem::ParseBlock1::Class1LoadSystem::ParseBlock2::Class1從同一命名空間訪問兩個塊。

我已經用簡單的整數值對此進行了測試,並且可以正常工作。 命名空間組合在一起,我可以在沒有任何警告的情況下訪問這些值(我使用了gcc -Wall -Werror -Wextra -pedantic )。

那么,這種命名空間的組合是否正確。 也許它有效,但我也許不應該使用它,我不知道。

另外,我想知道導入“主”頭文件(導入其他頭文件)的這個過程是否也正確(我正在使用所需的#ifndef#define#endif宏來保護多個進口),我使用的是這樣的:

# ifndef LOAD_SYSTEM_H_
# define LOAD_SYSTEM_H_

# include "block1/block1.h"
# include "block2/block2.h"

# endif

所以,請幫助我知道這是否正確。

您始終可以擴展現有的命名空間,因此該部分沒問題。

而那部分是唯一具有簡單技術答案的部分。

關於“主頭文件”,比較主觀,看個人喜好。 我更喜歡包含的標頭可以在沒有任何先決條件的情況下單獨包含(例如在它們之前包含其他內容)。 如果是這樣,那么對我來說一切都好,但如果不是,那么您的代碼用戶實際上必須包含大主頭文件以獲得任何較小的頭文件,這可能會對構建時間產生負面影響(如果他們不這樣做) 't,但它們本身包含先決條件,然后它們具有脆弱的代碼,當您更新標題時可能會停止工作)。

暫無
暫無

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

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