c++ - 为什么应该将 pimpl 声明为结构而不是类?

标签 c++ pimpl-idiom

pimpl 习语的规范形式(来自 Herb Sutter 的“Exceptional C++”)如下:

class X 
{
public:
 /* ... public members ... */
protected:
 /* ... protected members? ... */ 
private:
 /* ... private members? ... */
 struct XImpl;
 XImpl* pimpl_; // opaque pointer to
                // forward-declared class 
};

我的问题是,为什么 XImpl 声明为结构而不是类?

最佳答案

structclass 之间的唯一区别是基类和成员(分别为公共(public)和私有(private))的默认访问控制。您甚至可以用一个声明相同的类型并用另一个定义它(但请注意,某些编译器可能会对此发出警告)。

只使用对您来说最自然的任何东西。 @WhozCraig 正确地指出,由于 XImpl 在实现 X 之外已经不可访问,因此默认情况下使其成员 private 似乎是多余的。尽管如此,正如我上面所说的,它在这里根本没有区别,因为重要的只是用于定义的关键字。

关于c++ - 为什么应该将 pimpl 声明为结构而不是类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25906525/

相关文章:

c++ - 处理具有相同底层数据结构的不同类型

c++ - 何时在 C++ 中使用 Pimpl 模式而不是嵌套类,反之亦然?

c++ - 减少多虚拟继承中对象的大小(浪费)

c++ - 是否有人建议扩展 C++ 语言以消除 pimpl?

c++ - 直接用rapidjson保存json到文件

c++ - 在 Windows 上使用 QT 运行 LibVLC 时禁用命令提示符

c++ - constexpr 可以替换实例化模板并使用传递的参数两次的宏吗

c++ - 将 QString 转换为 uint16*

Code Complete 关于封装的 C++ 建议?

c++ - 自由函数与成员函数