将两个或多个C++名称空间合并为一个

Moi*_*vez 5 c++ combinations namespaces

首先,对不起我的英语.

好的,我正在开发一个执行特定过程的程序.此过程需要定义一些类和函数.所有这些都必须按块进行组织才能访问它们.

我的第一个想法是使用命名空间(C++),得到这样的东西:

namespace LoadSystem
{
   namespace ParseBlock1
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
   namespace ParseBlock2
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
}
Run Code Online (Sandbox Code Playgroud)

所以,如果这是好的话,我正在阅读以获得最好的想法.我已经读过,我不能使用大量的嵌套命名空间,因此,对于我的目的,最小级别是两个,如上所示.

我的目标是能够ParseBlocksLoadSystem命名空间中添加越来越多的东西.它将存储在一个.h文件中,因此,只有类的接口.由于每个块可以有很多类,我想将每个块的定义拆分成其他.h文件,以保持主.h文件尽可能小.

所以,我定义文件的想法结束block1.hblock2.h,每一个像这样的结构:

namespace LoadSystem
{
   namespace ParseBlock1
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
}
Run Code Online (Sandbox Code Playgroud)

namespace LoadSystem
{
   namespace ParseBlock2
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
}
Run Code Online (Sandbox Code Playgroud)

并将它们导入load_system.h文件中.因此,每次我需要添加另一个块时,我都会编写所需的文件,最后,我只需将新内容blockX.h导入到main中load_system.h.

然后,我必须能够使用LoadSystem::ParseBlock1::Class1或访问同一命名空间中的两个块LoadSystem::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
Run Code Online (Sandbox Code Playgroud)

所以,请帮助我知道这是否正确.

谢谢大家.

Che*_*Alf 2

您始终可以扩展现有的命名空间,因此该部分是可以的。

这部分是唯一有简单技术答案的部分。

关于“主头文件”,它更主观,​​是个人喜好的问题。我更喜欢包含的标头可以单独包含,而无需任何先决条件(例如在它们之前包含其他内容)。如果是这样,那么对我来说一切都可以,但如果不是,那么您的代码的用户实际上必须包含大的主头文件才能获得任何较小的头文件,这可能会对构建时间产生负面影响(如果他们不这样做)不是,但它们本身包含先决条件,然后它们的代码很脆弱,当您更新标头时可能会停止工作)。