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
};
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么XImpl声明为结构而不是类?
和之间的唯一区别是基础和成员的默认访问控制(分别是公共和私有).您甚至可以用一个声明相同的类型并用另一个定义它(但请注意,某些编译器可以对此发出警告).structclass
只需使用最自然的东西.@WhozCraig正确地指出,由于XImpl在实现之外已经无法访问X,因此private默认情况下使其成员似乎是多余的.尽管如此,正如我上面所说的,它在这里完全没有区别,因为它只是用于定义的关键字.
| 归档时间: |
|
| 查看次数: |
697 次 |
| 最近记录: |