Problem mit Vererbung, Polymorphie und Templates



  • Hi Leute,
    Ich hab hier folgendes:

    template<class X>
    class Base
    {
    protected:
        X m_Obj;
    public:
        //virtuelle Funktionen, die m_Obj verwenden
    };
    
    class Derived1 : public Base<MyClass1>
    { 
    public:
      //Funktionen, die Base<MyClass1>::m_Obj verwenden
    };
    
    class Derived2 : public Base<MyClass2>
    { 
    public:
      //Funktionen, die Base<MyClass2>::m_Obj verwenden
    };
    

    So jetzt will ich folgendes machen:
    Nen Zeiger auf Base, dem ich per new entweder n Objekt vom Typ Derived1 oder eines vom Typ Derived2 zuweis. Wie mach ich das? Ich kann ja nciht einfach

    Base *pBase;
    

    schreiben, da Base ja noch nen templateparameter braucht.Bitte um Vorschläge.

    BTW: Ist das überhaupt Polymorphie? Oder hab ich hier grad was durcheinander gebracht?



  • das problem ist, dass
    Base<int>
    und
    Base<foo>
    gänzlich verschiedene Typen sind - sie haben nix gemeinsam (ausser die implementierung)

    der einzige trick der mir einfallen würde (OK, erst würde ich versuchen das wegzudesignen) ist folgender:

    Base<T> erbt von einer abstrakten klasse die die virtual methoden von Base<T> nur als pure virtual hat -> nachteil, keine dieser methoden kann ein T nehmen oder returnen...



  • Original erstellt von Shade Of Mine:
    **das problem ist, dass
    Base<int>
    und
    Base<foo>
    gänzlich verschiedene Typen sind - sie haben nix gemeinsam (ausser die implementierung)
    **

    Jo, das is ja das Problem. Da wird ja zur Compilezeit die Klasse erst komplett erstellt ...

    Der Trick is gut *g* Ich muss nämlich keine Ts zurückgeben oder übergeben.
    Ich weiss, dass das wohl ein kleines (großes?) designproblem ist, aber für meine Zwecke reicht dieser Workaround aus ...
    Oder hat jemand grad auf die schnelle ne Idee, wie ich dieses Designproblem aus dem Weg schaffen könnte?

    [ Dieser Beitrag wurde am 18.06.2003 um 20:43 Uhr von dEUs editiert. ]



  • Verwendung von class Base und rein virtuellen funktionen darin (also ein interface). Kostet etwas Tipperei, logisch.


Anmelden zum Antworten