Kanoniczna forma idiomu pimpl (z Herb Sutter za „wyjątkowe C++”) przedstawia się następująco:Dlaczego pimpl powinien być zadeklarowany jako struktura, a nie klasa?
class X
{
public:
/* ... public members ... */
protected:
/* ... protected members? ... */
private:
/* ... private members? ... */
struct XImpl;
XImpl* pimpl_; // opaque pointer to
// forward-declared class
};
Moje pytanie brzmi, dlaczego XImpl
zadeklarowane jako struct zamiast klasy?
Nie ma sensu ukrywanie czegoś, co jest już ukryte. Domyślny dostęp do 'private' dla' class' vs. 'public' dla' struct' wydaje się trywialnym przesadą. – WhozCraig
Nie ma absolutnie żadnej różnicy (chyba że twój kompilator jest bardzo błędny). –
@WhozCraig Ale to jest deklaracja terminowa. W tym konkretnym przypadku nie ma absolutnie żadnej różnicy. Nie zapisuje nawet pisania :-) – juanchopanza