Pointer auf Objekt als Schlüssel verwenden



  • Hallo

    Ich habe folgendes Problem. Ich habe eine Reihe von Wrapperklassen entworfen. Nun brauche ich eine statische Methode, die mir zu jedem Pointer auf das eigentliche Objekt den Pointer auf das zugehörige Objekt der Wrapperklasse zurückgibt oder falls es noch kein Wrapperobjekt gibt eines anlegt, abspeichert und dann zurückliefert.
    Was mir fehlt ist eine geeignete Datenstruktur um das Schlüssel Wert Paar abzulegen und danach effektiv zu suchen. Leider habe ich nur wenig Wissen über die STL oder sonstige Libraries. Was noch zu sagen wäre, ist, dass der Pointer der übergeben wird vom Typ der Basisklasse ist, die eigentlichen Objekte aber immer abgeleiteten Klassen angehören. Der == Operator ist weder bei der Subklasse noch bei den eigentlichen Klassen zusätzlich implementiert.
    Ich würde mich sehr über Eure Hilfe freuen.

    Grüße
    Timo



  • Für Notfälle wie diesen reicht auch der normale Zeiger-Vergleich (und den gibt es auf jeden Fall):

    map<Base*,Wrapper*> wrappers;
    map<Base*,Wrapper*>::iterator pos = wrappers.find(ptr);
    if(ptr==wrappers.end()
    {
      Wrapper* wr = new Wrapper(ptr);
      wrappers.insert(make_pair(ptr,wr));
      return wr;
    }
    else
      return *pos;
    

    (allerdings mußt du der Map bei Gelegenheit mitteilen, daß ein Objekt sich gerade vernichtet hat, damit es aus der Sammlung wieder gelöscht und der eventuell angelegte Wrapper freigegeben werden kann - guter Punkt dafür ist der Base-Dtor)


Log in to reply