我有一个包含A.h以下代码的文件:
namespace Top
{
namespace Inner
{
namespace Bottom {
class ClassA { ... }
}
}
}
在另一个文件B.h中,类似的代码:
namespace Top
{
namespace Inner
{
namespace Bottom {
class ClassB { ... }
}
}
}
我的问题。
为什么在不同的文件中描述相同的名称namespace?或者,在编译或链接过程中,它们以某种方式合并为一个,编译器可以理解,如果我们在文件中具有相同的名称A,B那么它是否相同namespace?我有一个包含 20 多个不同文件的项目,这些文件具有相同的命名空间名称,但其中一些具有不同的类。此外,如果我想连接到我的项目dll,我将在其中ClassC拥有相同的空间名称层次结构,它会被视为相同namespace还是已经不同?为什么我们需要在不同的文件中重复空间名称?
这个选项有效吗?
#include "A.h"
#include "B.h"
void func()
{
Top::Inner::Bottom::ClassA();
Top::Inner::Bottom::ClassB();
}
它仍然是相同的命名空间,你只是补充它,编译器明白这是同一件事,主要是正确引用类。“为什么在不同的文件中描述相同的命名空间?” 实际上没有区别,但是否可取,由您决定。您的选择是有效的。
在不同的文件中复制名称
namespace可以实现..简要地说:
更多详情:
我们都是人类,我们都被设计成无法同时在脑海中保留许多东西。对于自己和其他程序员来说,将已经“准备好”的或多或少经过调试的代码部分移动到一个单独的文件中(可以说是,看不见),以免记住它们(在此外,还有一些关于可以和需要将哪些内容提取到文件中的规则,但这是一个单独的主题)。然后怎样呢?您是否必须共享名称空间?您不必这样做,因为您可以为
namespace. 让我们看看,例如,这是如何在 Qt 中完成的(此代码在创建表单/对话框时默认生成):主窗口.h
关于form.h
请注意,命名空间名称是相同的。这个特性扩展了现有的命名空间(可能在之前的某个地方已经声明过)。
除其他外,如您所说,使用名称重复,可以扩展已经存在的名称空间而无需重新编译它。没有人禁止你这样做:
并在屏幕上:
想象一下这节省了多少时间,因为我们不需要重建整个命名空间。