我刚刚自学 C++ 命名空间(来自 C# 背景),我真的开始认为,即使 C++ 比大多数其他语言做得更好,嵌套命名空间也不是其中之一!
我是否正确地认为,为了声明一些嵌套名称空间,我必须执行以下操作:
namespace tier1
{
namespace tier2
{
namespace tier3
{
/* then start your normal code nesting */
}
}
}
相对于:
namespace tier1::tier2::tier3
{
}
à la C#?
当我需要转发声明时,这变得更加疯狂:
namespace tier1
{
namespace tier2
{
namespace forward_declared_namespace
{
myType myVar; // forward declare
}
namespace tier3
{
/* then start your normal code nesting */
class myClass
{
forward_declared_namespace::myType myMember;
}
}
}
}
请记住,我开发的典型系统包括:
MyCompany::MySolution::MyProject::System::[PossibleSections]::Type
这就是为什么您在 C++ 示例中很少看到命名空间的使用吗?或者通常只有单个(非嵌套)命名空间?
UPDATE
对于任何有兴趣的人来说,这就是我的结局 http://www.adamjamesnaylor.com/2012/10/23/NestedNamespacesInC.aspx解决这个问题。
C++ 命名空间并不是一种设计机制 - 它们的存在只是为了防止名称冲突。在 99.99% 的情况下,您确实不想或不需要使用嵌套命名空间。
在 C++ 中正确使用命名空间的一个很好的例子是 C++ 标准库。这个相当大的库中的所有内容都放置在一个名为的命名空间中std- 没有尝试或需要将库分解为(例如)I/O 子命名空间、数学子命名空间、容器子命名空间等。
C++ 中建模的基本工具是类(某种程度上是模板),而不是命名空间。如果你觉得需要嵌套,你应该考虑使用嵌套类,它比命名空间有以下优点:
考虑到这些后,如果您仍然希望使用嵌套命名空间,请务必这样做 - 以这种方式使用它们在技术上没有任何问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)