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
声明为结构而不是类?
最佳答案
struct
和 class
之间的唯一区别是基类和成员(分别为公共(public)和私有(private))的默认访问控制。您甚至可以用一个声明相同的类型并用另一个定义它(但请注意,某些编译器可能会对此发出警告)。
只使用对您来说最自然的任何东西。 @WhozCraig 正确地指出,由于 XImpl
在实现 X
之外已经不可访问,因此默认情况下使其成员 private
似乎是多余的。尽管如此,正如我上面所说的,它在这里根本没有区别,因为重要的只是用于定义的关键字。
关于c++ - 为什么应该将 pimpl 声明为结构而不是类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25906525/