同一范围内有多个未命名命名空间?

问题描述 投票:0回答:2

我正在查看 pytorch 代码库,我看到同一范围内的多个匿名命名空间,例如 https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/quantized/cpu/ qpool.cpp#L23https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/quantized/cpu/qpool.cpp#L226

这个设计的意义何在?我们不能把它们结合起来吗?

c++ design-patterns namespaces
2个回答
0
投票

tldr:多个未命名的命名空间可以帮助将相关的私有函数组织成“组”。

未命名命名空间是旧 C 世界中

static
关键字的现代方式。目的是使函数私有于该文件(更严格地说是编译单元)。

它的一个典型用例是定义辅助函数。假设您有一个很长的函数,并且想将其分解为更小的函数。较小的功能是“实现细节”,不应向包含/导入您的文件的用户公开。您可以将它们放入未命名的命名空间中以使其私有。

假设文件中有几个“公共”函数,每个函数都有自己的“私有”辅助函数。将私有函数分组更有组织性,而不是将所有函数放入一个巨大的未命名命名空间中。

我的 2 美分可能不适用于 Pytorch 这样做的原因。


-1
投票

我们不能把它们结合起来吗?

一个父命名空间和同一翻译单元内的所有未命名命名空间都是相同的命名空间。它们可以像命名空间一样组合或分离。

这个设计的重点是什么?

由于我不是链接代码的作者,我无法说出他们为什么像他们那样编写程序。这可能是设计选择、审美偏好、重构的偶然产物或任何其他原因。

但我可以描述一个优点。对于人类程序员来说,感知垂直长范围是很困难的(至少在没有 IDE 可能具有的可视化工具的帮助下)。乍一看,当您处于一个长文件的中间时,无法判断您是在文件开头启动的范围内还是在其他范围内。只需向上滚动几行即可找到范围的开头,这非常方便。将命名空间分割成更小的部分可以实现这一点。

这通常适用于命名空间;不仅限于未命名的命名空间。

© www.soinside.com 2019 - 2024. All rights reserved.