gpt4 book ai didi

c++ - 将两个或多个 C++ namespace 合并为一个

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:01 24 4
gpt4 key购买 nike

首先,对不起我的英语。

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

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

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

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

我的目标是能够将越来越多的 ParseBlocks 添加到 LoadSystem 命名空间中。它将存储在单个 .h 文件中,因此,将只有类的接口(interface)。由于每个 block 可以有很多类,我想将每个 block 的定义拆分到其他 .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 文件中。因此,每次我需要添加另一个 block 时,我都会编写所需的文件,最后,我只需将新的 blockX.h 导入到主 load_system.h 中。

然后,我必须能够使用 LoadSystem::ParseBlock1::Class1LoadSystem::ParseBlock2::Class1 从同一个命名空间访问这两个 block 。

我已经用简单的整数值测试了它并且它有效。命名空间结合在一起,我可以在没有任何警告的情况下访问这些值(我使用 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

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

最佳答案

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

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

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

关于c++ - 将两个或多个 C++ namespace 合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14065600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com