在C++中隐藏命名空间
hiding namespaces in C++
我已经阅读了有关SO的其他类似问题的一些答案,这些问题似乎表明可以隐藏命名空间(为了隐藏实现细节),但他们没有说明如何。
因此,例如,如果我想要一个包含namespace B
的namespace A
,并且B
有一些令人讨厌的A
功能的实现细节,我想对最终用户隐藏,是否有某种链接器技巧,我可以使用这样B
在A
之外不可见, 但是A
程序的其余部分仍然可见?
命名空间
的目的是避免名称冲突。这基本上就是全部。它们不提供任何隐藏任何功能。尽管在某些程度上他们强迫写namesp_name::sometinng
.这可能会让用户认为这是否值得这样做。
上面的评论建议,基本上是将您的标头拆分为公共标头和私有标头。私有标头仅包含在 cpp 文件中,不应包含在上层代码中。这在许多情况下有效,这很有帮助,但它并不能解决所有问题。
你似乎在谈论一个"Pimpl"模式,和/或句柄/身体习语。 或者你可以想出的其他一些名字。 一个非常简短的例子是在增强智能指针页面上。 它解释了如何将具有不完整类型的类声明到智能指针中,然后在其他位置定义实现。 这对 API 用户"隐藏"了它,因为"内部"类的实现可以更改,而无需由库创建者以外的任何人重新编译,因为大小仅在实现中,而不是在头文件中。 只有"公共"类的大小是已知的,并且保持不变。 通读两个.cpp文件和一个 .hpp 文件,看看它为什么有效是否有意义。
我希望这与你想做的事情有关。
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- c++ 内联友元函数是否会导致命名空间之间的名称隐藏?
- C++命名空间名称隐藏
- 在C++中隐藏命名空间
- 为什么运算符 " " 隐藏在命名空间中?
- 在我的命名空间中隐藏 DirectX 命名空间
- 隐藏第三方命名空间是否危险
- 隐藏模板化的辅助函数——静态成员或未命名的命名空间
- 在命名空间之外隐藏类成员
- 在c++中从父命名空间访问隐藏操作符
- 命名空间作用域中的操作符在全局作用域中隐藏另一个操作符