Gibt es eine Möglichkeit, private Datenelemente einer C++-Klasse vor ihren Benutzern in der cpp-Datei zu verbergen? Ich betrachte die privaten Mitglieder als Teil der Implementierung, und es scheint mir ein wenig rückständig, sie in der Header-Datei zu deklarieren.
Antworten
Zu viele Anzeigen?Im Allgemeinen wird dies mit dem Idiom "pimpl" gehandhabt.
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)
Siehe Pimpl Idiom
Sie machen Werbung? ;)
Sie können Header-Dateien erstellen, in denen Sie nur die öffentliche und geschützte API deklarieren.
Dem Nutzer werden nur diese angezeigt, die er einbeziehen kann. Sie verknüpfen ihren Code mit einer Bibliothek, die Sie unter Verwendung der vollständigen API und der Definitionen erstellt haben.
Für Inline-Funktionen: Stellen Sie sicher, dass sie in nicht-inlined Code verwendet werden, dann gibt es eine Definition in der Bibliothek zur Verfügung (ich bin nicht sicher, dass es in der Benutzerimplementierung inlined wird, jedoch).
Bei Code-Vorlagen gibt es keinen wirklichen Ausweg. Eine halbherzige Lösung besteht darin, Code zu erstellen, der den Vorlagencode mit verschiedenen Objekttypen verwendet. Der Benutzer wird auf diese beschränkt sein, da sie die einzigen in Ihrer Bibliothek verfügbaren Definitionen sind.