在C++中隐藏命名空间

hiding namespaces in C++

本文关键字:命名空间 隐藏 C++      更新时间:2023-10-16

我已经阅读了有关SO的其他类似问题的一些答案,这些问题似乎表明可以隐藏命名空间(为了隐藏实现细节),但他们没有说明如何。

因此,例如,如果我想要一个包含namespace Bnamespace A,并且B有一些令人讨厌的A功能的实现细节,我想对最终用户隐藏,是否有某种链接器技巧,我可以使用这样BA之外不可见, 但是A程序的其余部分仍然可见?

命名空间

的目的是避免名称冲突。这基本上就是全部。它们不提供任何隐藏任何功能。尽管在某些程度上他们强迫写namesp_name::sometinng.这可能会让用户认为这是否值得这样做。

上面的评论建议,基本上是将您的标头拆分为公共标头和私有标头。私有标头仅包含在 cpp 文件中,不应包含在上层代码中。这在许多情况下有效,这很有帮助,但它并不能解决所有问题。

你似乎在谈论一个"Pimpl"模式,和/或句柄/身体习语。 或者你可以想出的其他一些名字。 一个非常简短的例子是在增强智能指针页面上。 它解释了如何将具有不完整类型的类声明到智能指针中,然后在其他位置定义实现。 这对 API 用户"隐藏"了它,因为"内部"类的实现可以更改,而无需由库创建者以外的任何人重新编译,因为大小仅在实现中,而不是在头文件中。 只有"公共"类的大小是已知的,并且保持不变。 通读两个.cpp文件和一个 .hpp 文件,看看它为什么有效是否有意义。

我希望这与你想做的事情有关。