5

首先,对不起我的英语。

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

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

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

因此,我正在阅读以了解这是否好坏。我已经读过我不能使用很多嵌套的命名空间,所以,就我的目的而言,最小级别是两个,如上所示。

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

所以,我以定义一个文件的想法结束block1.hblock2.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.hmain load_system.h.

然后,我必须能够使用LoadSystem::ParseBlock1::Class1or访问同一命名空间中的两个块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

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

4

1 回答 1

2

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

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

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

于 2012-12-28T06:41:46.753 回答