Operator [] für Pointer auf Objekt
-
Hallo zusammen,
ich habe eine map Container Klasse geschrieben, die soweit gut funktioniert. Dazu habe ich auch den [] Operator überladen, um direkten Zugriff auf ein Element im Container zu haben (zB. "element = map["key"];"). Auch das funktioniert gut.
Aber, wenn ich nun meine Instanz der Klasse einer Funktion (mit call by reference) übergebe, dann habe ich einen Pointer auf dieses Objekt. Somit funktionert dieser Aufruf des Operators nicht mehr.
// Die Deklaration des Operators: Element<T> *operator[](std::string);Hat jemand von euch eine Idee, wie ich den überladenen Operator nun auch für einen Pointer auf eine Instanz dieser Klasse lauffähig machen kann?
Gruss und danke im Voraus,
Matthias
-
also hmm irgendwie weiß nicht wie deine map direkt aussieht ... aber guck dir mal referenzen an ..
template <typename _First, typename _Second> class map { // ... _First const& operator[](_Second const&) const; _First& operator[](_Second const&); _Second const& operator[](_First const&) const; _Second& operator[](_First const&); // ... };hätte doch was ...
-
Hi, das hilft mir leider nicht weiter -- zumindest verstehe ich nicht ganz. Brauche ich noch eine zusätzliche Definition, um den Operator auf einen Pointer anwenden zu können?
Soweit ich das verstehe, unterscheiden sich deine Bsp. ja "nur" darin, ob sie die Werte verändern, oder nicht (das ganze zwei mal, vertauscht mit _First und _Second)?
lg, Matthias
-
Du mußt dann erst dereferenzieren:
map<int, double> *pMap = ...; double d = (*pMap][42]; // alternativ auch pMap->operator[](42)Edit:
Ich bin jetzt von einer (konstanten) Referenz als Rückgabewert ausgegangen (Pointer sollte man in C++ sow wenig wie möglich benutzen).
(D)Evil's Code unterscheidet sich nämlich diesbezüglich noch von deinem Code.
-
besten Dank, genau das wars
