PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Klasse mit Konstante (const) in std::map



BLUESCREEN3D
03-10-2007, 19:44
Ich habe eine Klasse, die eine Konstante enthält. Diese Konstante muss natürlich in allen Konstruktoren über die Initialisierungsliste initialisiert werden. Deshalb gibt es auch nur einen Konstruktor mit einem Parameter und keinen Standardkonstruktor (weil es für die Konstante keinen sinnvollen Standardwert gibt).

Nun will ich diese Klasse aber in einer std::map nutzen und da fangen die Probleme an: Ich kann std::map::operator[] nicht für den Zugriff auf die eingetragenen Objekte nutzen, weil diese Funktion einen Standardkonstruktor braucht (könnte ja sein, dass der angegebene Eintrag noch nicht existiert und erstellt werden muss).

Mögliche Lösungen, die mir einfallen:
Standardkonstruktor erstellen, aber exit() aufrufen lassen - irgendwie nicht so das Wahre.
statt operator[] dies nutzen:

my_map.find(some_key)->second.do_something();
Geht, ist aber zu umständlich. Und ein Makro dafür wäre auch nicht so toll.
Keine Objekte in die map packen, sondern nur Zeiger. Dann darf man natürlich nicht vergessen, vor dem Löschen der map die Einträge per delete freizugeben.
Möglichkeit 3 gefällt mir bisher am besten, aber gibt es noch was besseres?

anda_skoa
04-10-2007, 15:19
Das Problem mit dem operator[] ist ohnehin, dass er eben Elemente hinzufügt.

Wenn ich Maps benutze, will ich praktisch fast immer den Fall, dass ein Element nicht vorhanden ist, getrennt behandeln, d.h. find() und Vergleich mit end()

Ciao,
_