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?
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?