operator -> mit variablem rückgabevert... oder andere lösung?



  • hi
    also, ich schreibe gerade eine art lib. in dieser möchte ich für verschiedene probleme verschiedene implementationen bieten. so zb für astrings. ich ahbe eine STL-Stirng implementation und eine C-Style-String Implementation. nun möchte ich eine "generische klasse" haben, um zb funktionen jeden erdenklichen string übergeben zu können (ob nun stl oder c oder...)
    meine erste idee war, einfah eine basis klasse zu schreiben, das scheiterte aber aus verschiedenen gfründen (bitte keine fragen 🙄 )
    nun hatte ich die idee eine art kontainer zu schreiben, der ein enum, was den typ des strings angibt (STL, C,...) und ein union mit je einer variable der implementationen enthält. um nun aber solche konstrukte:

    StringContainer x(STL); // konstruktor übernimmt den typ und initialisiert den entsprechenden string
    x.mSTLString.DoSomething();
    

    zu vermeiden und lieber sowas machen zu können...

    StringContainer x(STL);
    x.DoSomething(); //kann man operator . überladen?? wenn nicht:
    x->DoSomething();
    

    dachte ich mir ich überlade operator -> (oder '.'??). woher weiss er denn, welcher string aus dem union der richtige is? das is ja noch einfac, durch das enum/flag, was dem konstruktor übergeben wird, aber wie mache ich es, dass der operator auch immer denr ichtigen rückgabe wert hat? mir fällt nicht ein...
    wenn das nicht geht, fällt euch eine andere lösung für mein problem ein (oben beschrieben)?
    danke schonmal jez



  • hast dus chon templates ausprobiert?



  • ja, allerdings muss ich bei templates zur compilezeit wissen, was für einen typ von stireng ich benutzen will...
    ist zb in einer klasse ein string objekt enthalten, jedoch erst in einer memberfunktion klar wird, welche implemenation benutzt werden soll, so komme ich mit templates schon nicht mehr weit... oder gibt es da einen mir unbekannten weg??


Log in to reply