Ausblenden von privaten Datenelemente? (C ++)
Frage
Gibt es eine Möglichkeit private Daten Mitglieder einer C ++ Klasse zu verstecken weg von seinen Nutzern, in der CPP-Datei? Ich denke an den privaten Mitglieder als Teil der Umsetzung, und es scheint ein wenig nach hinten, sie in der Header-Datei zu erklären.
Lösung
Das "Pimpl" Idiom ist, wie dies in der Regel behandelt wird.
Siehe
- http://www.gotw.ca/gotw/024.htm
- http://www.gotw.ca/gotw/028.htm
- http://herbsutter.com/gotw/_100/ (aktualisiert für C ++ 11 )
Andere Tipps
Sie wollen so etwas wie das PIMPL Idiom verwenden
Siehe Pimpl Idiom
Der klassische Weg, dies zu tun, ist mit einem Proxy-Zeiger auf eine interne Klasse, die die Funktionalität implementiert. Es gibt keine Möglichkeit, Teilklassendefinitionen in C ++ zu tun, die ich kenne.
Kommerziell? ;)
Sie können Header-Dateien erstellen, in dem Sie nur die Öffentlichkeit erklären und geschützt API.
Der Benutzer wird nur mit diesen vorgestellt, die sie enthalten. Sie verbinden ihren Code mit einer Bibliothek, die Sie die komplette API und die Definitionen gebaut werden.
Für inlined Funktionen: sicherstellen, dass sie in nicht-Inline-Code verwendet werden, dann wird es eine Definition zur Verfügung steht in der Bibliothek (ich bin nicht sicher, dass es in dem Benutzer Implemenation inlined werden, jedoch)
.Für Templat-Code gibt es keinen wirklichen Weg, um. Eine halbherzige Lösung ist, um Code zu machen, die den Templat-Code verwendet, um mit verschiedenen Objekttypen. Der Benutzer wird auf diese beschränkt sein, weil sie die einzigen Definitionen in Ihrer Bibliothek sind.