Basisklassenzeiger casten?



  • Hallo!

    Eine template-Klasse ist von einer abstrakten Basisklasse abgelitten.

    class abstract
    {
      virtual void machwas() = 0;
    };
    
    template<typename T>
    class temp
    {
    };
    
    int main()
    {
        temp<float> t;
        abstract* a = &t;
    }
    

    Kann ich jetzt irgendiwe vom zeiger a auf den wahren typ temp<float> schliessen?!

    (Das iist keine Designfrage ... nur so generell 🙄 )

    Danke



  • Ich nehme mal an du wolltest schreiben

    template<typename T>
    class temp : public abstract
    {
    };
    

    ➡

    int main()
    {
        temp<float> t;
        abstract* a = &t;
    
        if ( temp<float>* z = dynamic_cast< temp<float> >( a ) )
            Ist vom Typ temp<float>
        else
            Neee
    }
    


  • Hmm ... was red ich eigendlich drum herum? Ich maöchte sowas machen:

    Ich habe ein array von abstract* zeigern die alle auf unterschiedliche templates zeigen, also deri<int> deri<float> und so.

    abstract* a[23];
    

    Nun will ich ganz wahllos sowas machen:

    a[1]->tuwas( a[13] );
    

    a[1] muss jetzt aber den genauen typ wissen! Was tun?



  • MasterOfBugs schrieb:

    a[1] muss jetzt aber den genauen typ wissen! Was tun?

    Vorher in den richtigen Typ casten?

    Btw, du wolltest zwar nichts über Design hören, aber das sieht nicht besonders gut aus..

    Btw2: Kannst du nicht einfach eine gemeinsame Basisklassen-Methode einbauen?



  • a[1] muss den dynamischen typ von a[13] wissen?
    sieht ein bisschen danach aus, als müsstest du dich mit double dispatching beschäftigen.


Log in to reply