【发布时间】:2011-01-07 16:01:25
【问题描述】:
我最近完成了一堆 Java 编码,并且已经习惯了非常具体的包命名系统,例如深度嵌套。 com.company.project.db。这在 Java、AS3/Flex 和 C# 中运行良好。我也看到在 C++ 中应用了相同的范例,但我也听说将 C++ 命名空间视为 Java 包的直接对应物是不好的。
这是真的吗,为什么?命名空间/包有什么相似之处和不同之处?如果您使用深度嵌套的命名空间,可能会出现什么问题?
【问题讨论】:
-
与任何其他语言(如 Java、AS3、C# 等)相同...我不明白您的问题的重点。
-
我的意思是我看不到任何东西,我很想知道一个明显的粉丝觉得它们有什么用处。
-
@Neil:它提供了一种很好的分层结构代码的方法。它可能还没有在 C++ 中流行起来(还没有!),但它非常有帮助。与平面命名空间相比,更细粒度的组织还有助于防止名称冲突。命名空间/包引入了比单独通过头文件实现的更好的模块化。
-
虽然我在自己的代码中使用了命名空间,但我遇到的情况非常少,它们实际上确实可以防止名称冲突,因此不需要复杂的层次结构来解决这个问题。而且我认为层次结构在任何情况下都不是一个非常有用的设计工具——如果我们从 OOP 中学到了什么,那就是复杂的层次结构不是答案。
-
@Neil,“我遇到的情况非常少,它们确实可以防止名称冲突”——我同意命名空间的 层次结构——但在工作之后最近使用 C 和 Objective-C 时,我痛苦地提醒我,当您完全 缺少命名空间时,这是一个多么大的问题!给所有东西一个前缀的“解决方案”是丑陋和不自然的,恕我直言,以及哪些命名空间适合替换。
标签: java c++ namespaces packages