gpt4 book ai didi

C++ 命名空间建议

转载 作者:IT老高 更新时间:2023-10-28 12:07:36 26 4
gpt4 key购买 nike

我只是在自学 C++ 命名空间(来自 C# 背景),我真的开始认为,即使 C++ 比大多数其他语言做得更好,嵌套命名空间也不是其中之一!

我是否正确地认为为了声明一些嵌套的命名空间,我必须执行以下操作:

namespace tier1
{
namespace tier2
{
namespace tier3
{
/* then start your normal code nesting */
}
}
}

相对于:

namespace tier1::tier2::tier3
{
}

在 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++ 示例中很少看到命名空间的原因吗?还是通常只有单个(非嵌套)命名空间?

更新

对于任何感兴趣的人,this is how I ended up解决这个问题。

最佳答案

C++ 命名空间并非旨在成为一种设计机制——它们只是为了防止名称冲突。在 99.99% 的情况下,您确实不想或不需要使用嵌套命名空间。

在 C++ 中正确使用命名空间的一个很好的例子是 C++ 标准库。这个相当大的库中的所有内容都放置在一个名为 std 的命名空间中 - 没有尝试或不需要将库分解为(例如)一个 I/O 子命名空间、一个数学子命名空间命名空间、容器子命名空间等。

在 C++ 中建模的基本工具是类(在某种程度上是模板),而不是命名空间。如果你觉得需要嵌套,你应该考虑使用嵌套类,它比命名空间有以下优点:

  • 他们有方法
  • 他们可以控制访问权限
  • 它们无法重新打开

考虑到这些,如果您仍然希望使用嵌套命名空间,请务必这样做 - 以这种方式使用它们在技术上没有任何问题。

关于C++ 命名空间建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/713698/

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