c++ - 在不使用未命名命名空间的情况下在 header 中隐藏 C++ 类

标签 c++ namespaces header forward-declaration pimpl-idiom

我正在编写一个 C++ 头文件,我在其中定义了一个

class A {
   // ...
};

我想对外界隐藏(因为它可能会改变,甚至会在这个标题的 future 版本中被删除)。

在同一个标​​头中还有一个类 B,它有一个类 A 的对象作为成员:

class B {
public:
   // ...

private:
   A a_;
};

什么是对外界隐藏 A 类的正确方法?

如果我将 A 的定义放在未命名的命名空间中,编译器会发出警告,因此我认为,由于内部链接的问题,我应该做其他事情。

最佳答案

在 C++ 中正确的做法是 PIMPL成语。替代解决方案是将要隐藏的类放入嵌套命名空间,通常称为 detail。但这不会使其完全私有(private)化,因为用户仍将暴露于其依赖项,并且能够直接使用它。

关于c++ - 在不使用未命名命名空间的情况下在 header 中隐藏 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780918/

相关文章:

c++ - 两次 GCC 编译相同的输入,生成两个不同的代码(第二个错误)

c# - 动态命名空间切换

c# - 导出给定命名空间的类名、方法名

.net - Type.FullName 字段的合理长度限制是多少?

ios - iOS 上显示键盘后如何固定标题?

email - 电子邮件线程中自定义标题的持久性

c++ - C++/SFML 中的平稳动量减速?

c++ - 函数声明有什么问题?

c++ - 使用正则表达式获取大括号 block 的列表

c++ - 头文件和包含最佳实践