首先,我的英语很抱歉。将两个或多个C++命名空间合并为一个
好吧,我正在执行一个程序,执行一个特定的过程。这个过程需要定义一些类和函数。他们都必须分块组织才能访问它们。
我的第一个想法是用命名空间(C++)的工作,得到这样的事情:
namespace LoadSystem
{
namespace ParseBlock1
{
class ClassA {...}
class ClassB {...}
class ClassC {...}
}
namespace ParseBlock2
{
class ClassA {...}
class ClassB {...}
class ClassC {...}
}
}
所以,我正在读以获得最佳的想法,如果这是好还是不好。我已经读过,我不能使用大量的嵌套命名空间,所以,为了我的目的,最小级别是两个,如上所示。
我的目标是能够在LoadSystem
命名空间中添加越来越多的ParseBlocks
。它将被存储在一个单独的.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
和#endif
宏从防范多个进口),我使用这样的东西:
# ifndef LOAD_SYSTEM_H_
# define LOAD_SYSTEM_H_
# include "block1/block1.h"
# include "block2/block2.h"
# endif
所以,请帮助我知道这是否正确或不。
谢谢大家。
据我所知,这是一个完全正确的使用名称空间的方式。你可以有许多并行使用它们,没有问题。 (我不知道的是你是否真的需要所有这些命名空间;如果不理解所有的类是如何使用的以及它们是如何使用的,很难说清楚。) – jogojapan
你的英语非常好。我做了一些小的修改,以平滑它的流畅性和格式。 – wallyk
jogojapan:谢谢,我终于(阅读答案)明白,这个“组合”的过程不是一个错误。谢谢。 wallyk:设计指定了一些逻辑体系结构,所以我认为我必须尝试在代码上表示该体系结构:P,但在这里阅读答案,并更多地考虑名称空间的情况和性质,我想我将只管理一个级别:P(程序的名称,像MySystem :: Class1,MySystem :: Class2等等)。 –