map::mapped_type für alloziierung



  • Hi,

    ich habe mehrere maps, ungefähr so definiert:

    typedef map<KlasseA*, KlasseB*> ABM;
    typedef map<KlasseA*, KlasseC*> ACM;
    //[...]
    ABM t1;
    ACM t2;
    

    Nun habe ich eine Templatefunktion geschrieben der ich diese maps übergeben möchte und die dann entsprechend einen Eintrag für die übergebene Map erzeugt. Mein Problem ist, dass ich nicht map::mapped_type verwenden kann, da es ein Zeiger ist:

    template < typename MAPTYPE >
    bool AddEntry(KlasseA* t_key, MAPTYPE& ref_map)
    {
    	MAPTYPE::mapped_type t_type = new MAPTYPE::mapped_type(t_key);
            //[...]
    }
    
    /* Code */
    AddEntry(ptr_key,t1);
    

    Wie komm ich an den mapped_type typ ran um ihn entsprechend für die Alloziierung zu verwenden (OHNE den typen z.b. als Templateparameter aufzuführen)?

    Vielen Dank iV



  • Type Traits:

    MAPTYPE::mapped_type a = new std::remove_pointer<MAPTYPE::mapped_type>::type(t_key);
    


  • Da fehlen noch viele "typename"s:

    typename MAPTYPE::mapped_type a =
      new typename std::remove_pointer<typename MAPTYPE::mapped_type>::type(t_key);
    

    Welcome to the wonderful world of templates!

    Du kannst dich auch auf den map-Typen festlegen:

    template < typename K >
    bool AddEntry(KlasseA* t_key, std::map<KlasseA*,K*>& ref_map)
    {
        K* t_type = new K(t_key);
        //[...]
    }
    

    ... wobei das zu viele * nach meinem Geschmack wären. Sicher, dass du weißt, was du da tust und nicht krampfhaft versuchst, Java in C++ zu proggen?



  • Das mit dem Festlegen ist ganz schön, daran hab ich mich nicht erinnert...
    Zu Java: Ja, schon wieder so viele Leute hier, die Stackobjekte meiden! Was'n da lous, Leute, was'n da lous!



  • Hi,

    vielen Dank euch beiden! remove_pointer ist genau was ich suche! (ja typename immer schön davor gesetzt..^^)

    Haha, ja leider geht es mit den Pointern in diesem Fall nicht anders...na ja, zumindest der Key, den Value könnte man durchaus aufn Stack erzeugen, aber leider war das nicht meine entscheidung...ich bin nur das ausführende Organ in diesem Fall (nicht brainlos, aber ich habe keinen Einfluß mehr auf die Konzeption...hat mir aber mal wieder gezeigt wie wichtig die Projektkonzeptphase ist, in der ich mich gerade für mein eigenes Projekt befinde..schonmal erwähnt letztens glob ick). 🙂

    thx u schönen Sonntag!



  • Katachi schrieb:

    leider war das nicht meine entscheidung...ich bin nur das ausführende Organ in diesem Fall (nicht brainlos, aber ich habe keinen Einfluß mehr auf die Konzeption...hat mir aber mal wieder gezeigt wie wichtig die Projektkonzeptphase ist

    Ausreden 😉 Es gibt da etwas, das sich Refactoring und Redesign nennt. Was irgendwann mal konzipiert wurde ist nicht in Stein gemeißelt und darf geändert werden, wenn man erkennt (und begründet), dass das Konzept verbesserungsfähig ist.



  • pumuckl schrieb:

    Ausreden 😉 Es gibt da etwas, das sich Refactoring und Redesign nennt. Was irgendwann mal konzipiert wurde ist nicht in Stein gemeißelt und darf geändert werden, wenn man erkennt (und begründet), dass das Konzept verbesserungsfähig ist.

    😃 ..hey, MIR wäre es doch boogie. Ich hab nen ordentlichen Stundensatz, ich würde von mir aus auch den ganzen Planeten umschreiben, refactorn, redesignen, reevaluieren und realloziieren... 😉 Ändert aber nichts daran dass das Design von der Projektleitung abgesegnet ist und ich lediglich Implementierungshilfe bin und somit den Anweisungen des Leadproggers Folge zu leisten hab ("Ey, find mal ne Lösung dafür..", den Spruch hör ich den ganzen Tag!).

    Ich denke aber eher dass der Projektleiter Angst hat die Deadline nicht zu treffen. Neu entstandene Firma, Geburtsprojekt...da ist man vorsichtig. Dass der nachträgliche Aufwand fürs Redesign größer ist, als es jetzt gleich "richtig" zu machen..weiß ja nicht was du für Erfahrung mit start-up firmen hast aber da weißt du dann wie hart Granit sein kann..hihi. Also ja, letzlich isses ne Ausrede 😉


Anmelden zum Antworten