【发布时间】:2012-12-28 06:33:38
【问题描述】:
首先,对不起我的英语。
好的,我正在开发一个执行特定进程的程序。这个过程需要定义一些类和函数。所有这些都必须以块的形式组织起来才能访问它们。
我的第一个想法是使用命名空间 (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.h 和block2.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::Class1 或 LoadSystem::ParseBlock2::Class1 从同一命名空间访问这两个块。
我已经用简单的整数值对此进行了测试,它可以工作。命名空间结合起来,我可以在没有任何警告的情况下访问这些值(我使用了gcc -Wall -Werror -Wextra -pedantic)。
那么,这种命名空间的组合是否正确。也许它有效,但我可能不应该使用它,我不知道。
另外,我想知道这个导入“主”头文件(导入其他头文件)的过程是否也正确(我正在使用所需的#ifndef、#define 和@987654339 @宏来防止多次导入),我正在使用这样的东西:
# ifndef LOAD_SYSTEM_H_
# define LOAD_SYSTEM_H_
# include "block1/block1.h"
# include "block2/block2.h"
# endif
所以,请帮我看看这是否正确。
【问题讨论】:
-
据我所知,这是使用命名空间的完全正确的方式。您可以拥有许多并并行使用它们,没问题。 (我不知道你是否真的需要所有这些命名空间;如果不了解所有类的作用以及它们的使用方式,就很难判断。)
-
你的英语很好。我做了一些小的编辑以使其流畅和格式化。
-
jogojapan:谢谢,我终于(阅读答案)明白这个“组合”的过程不是一个错误。谢谢。 wallyk:嗯,设计指定了一些逻辑架构,所以,我想我必须尝试在代码上表示该架构:P,但是阅读这里的答案,并更多地考虑命名空间的情况和性质,我想我会管理只有一个级别:P(程序的名称,类似于 MySystem::Class1、MySystem::Class2 等)。
标签: c++ namespaces combinations