2016-11-27 7 views
1

Gibt es eine Möglichkeit, einer STL-Klasse innerhalb Ihres Codes eine private Variable hinzuzufügen? Zum Beispiel so, dass jeder Instanz von "std :: list" eine zusätzliche Variable hinzugefügt wird. Oder müssten Sie nur Ihre eigene Liste von Grund auf neu erstellen?Private Variable zu C++ STL-Klasse hinzufügen

+2

Warum nicht eine Klasse von 'std :: list' abgeleitet? Von Grund auf neu zu machen ist normalerweise eine sehr schlechte Idee. – tadman

+1

@tadman Vergiss nicht 'privat'. – LogicStuff

+8

Klingt nach einem [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - was willst du * wirklich * erreichen? –

Antwort

3

In einigen Fällen ja. Zum Beispiel haben std :: istream und std :: ostream eine spezielle, selten verwendete Methode namens xalloc(), mit der Sie allen Instanzen dieser Klassen ein oder mehrere long oder void* Mitglieder hinzufügen können.

Aber das ist nicht typisch. Für Container-Klassen wie std :: list gibt es keinen solchen Member-Hook, um "Slots" hinzuzufügen, um benutzerdefinierte Daten zu enthalten.

Container-Klassen verfügen jedoch über ein optionales Vorlagenargument für einen Zuordner. Jeder Container verfügt über einen Zuordner, der standardmäßig zustandslos ist und new und delete verwendet, um Elemente zuzuordnen. In C++ 11 und später können diese Zuordner "stateful" sein, was bedeutet, dass Sie Ihren eigenen Zuweiser mithilfe von new und delete erstellen, aber auch beliebige zusätzliche Daten speichern können.

Sobald Sie Ihren Zuordner mit dem von Ihnen benötigten Status geschrieben haben, können Sie ihn abrufen, z. aus einer Liste mit get_allocator().

+0

Die Verwendung des Allokators ist ein kluger Trick. Danke. – YSC

Verwandte Themen