Template-Spezialisierung oder Implementierungsklassen?



  • a)

    class A;
    class B;
    
    template <class T>
    class Klasse
    {
    };
    
    template <>
    class Klasse <A>
    {
    };
    
    template <>
    class Klasse <B>
    {
    };
    

    b)

    class Klasse
    {
         Klasse(KlassenImpl* impl);
    };
    
    abstract class KlassenImpl
    {
    };
    
    class KlassenImplA : public KlassenImpl
    {
    };
    
    class KlassenImplB : public KlassenImpl
    {
    };
    

    Was ist besser? Gibts Unterschiede? Welche?

    MfG SideWinder



  • ich würde lieber a) nehmen, da du
    1. keine Virtuellen Funktionen benötigst
    2. keinen dynamischen Speicher benötigst
    3. es einfach C++ hafter und übersichtlicher wirkt, wenn du

    Klasse<A> foo;
    

    anstelle von

    Klasse foo(new AImpl);
    

    schreibst

    abstract class KlassenImpl
    

    das ist mir aber ganz neues C++ mit dem abstract davor :p



  • Sonst hätt ich glatt noch ne Methode mit =0 schreiben müssen, also lieber abstract erfinden 😉

    Ich hätte auch lieber A genommen, bloß gibts da eigentlich auch semantische Unterschiede? Dinge die zu beachten sind?

    MfG SideWinder



  • Hallo,
    beides hat seine Einsatzgebiete. Der erste Ansatz ist statischer Natur und gut geeignet, wenn die Entscheidung für eine Implementation einmal getroffen wird und zur Compilezeit feststeht. Der zweite Ansatz ist dynamischer. Damit kannst du die Impl-Klasse sogar zur Laufzeit wechseln -> Beispiel: Verschiedene Styles einer GUI.



  • Mist dann habe ich im Anderen Thread den falschen Weg aufgezeigt *grml*

    MfG SideWinder


Anmelden zum Antworten