2008-10-15 10 views
32

Gibt es eine Möglichkeit, private Datenelemente einer C++ - Klasse in der cpp-Datei vor ihren Benutzern zu verbergen? Ich denke an die privaten Mitglieder als Teil der Implementierung und es scheint etwas rückwärts zu stehen, sie in der Header-Datei zu deklarieren.Private Datenmitglieder verstecken? (C++)

Antwort

52

Das "pimpl" Idiom ist, wie dies in der Regel behandelt wird.

Siehe

+0

Danke, es funktioniert jetzt. Diese beiden Artikel erklären das Idiom gut. – jeffythedragonslayer

+0

Hat dies Auswirkungen auf die Leistung? – jjxtra

+0

Im Allgemeinen kann dies eine Auswirkung auf die Leistung haben, da es immer eine Zeigerdereferenzierung gibt, wenn auf die privaten Daten zugegriffen wird. Ein Compiler kann es jedoch so optimieren, dass der Einfluss vernachlässigbar ist. –

4

Der klassische Weg, dies zu tun, ist mit einem Proxy-Zeiger auf eine interne Klasse, die implementiert die Funktionalität. Es gibt keine Möglichkeit, partielle Klassendefinitionen in C++ zu machen, die ich kenne.

1

Kommerziell verwenden? ;)

Sie können Header-Dateien erstellen, in denen Sie nur die öffentliche und geschützte API deklarieren.

Dem Benutzer werden nur diese vorgestellt, die sie enthalten können. Sie verknüpfen ihren Code mit einer Bibliothek, die Sie mit der vollständigen API und den Definitionen erstellt haben.

Für Inline-Funktionen: Stellen Sie sicher, dass sie in nichtlinearem Code verwendet werden, dann wird eine Definition in der Bibliothek verfügbar sein (ich bin nicht sicher, ob sie in der Benutzerimplementierung verwendet wird).

Für Vorlagencode gibt es keinen wirklichen Weg herum. Eine halbherzige Lösung besteht darin, Code zu erstellen, der den Vorlagencode mit unterschiedlichen Objekttypen verwendet. Der Benutzer ist auf diese beschränkt, da sie die einzigen in Ihrer Bibliothek verfügbaren Definitionen sind.