2010-08-17 11 views
16

Sto cercando di utilizzare QSharedPointer nella mia struttura polimorfica, ma non sono riuscito a trovare la sintassi corretta per convertire il puntatore della classe di base in puntatore della classe derivata.QSharedPointer polimerico

struct Switch : State { 
int a; 
}; 

QSharedPointer <State> myState=QSharedPointer <State>(new Switch); 

QSharedPointer <Switch> mySwitchTest= ??? myState; 

Cosa devo mettere nel posto di ???

risposta

22

Uso qSharedPointerCast():

QSharedPointer <Switch> mySwitchTest= qSharedPointerCast<Switch>(myState); 

Oppure chiamare staticCast() sul puntatore intelligente:

QSharedPointer <Switch> mySwitchTest= myState.staticCast<Switch>(); 

Entrambe le versioni sono sostanzialmente equivalenti a fare static_cast su puntatori prime.

11

Per un cast dinamico, utilizzare qSharedPointerDynamicCast:

class Derived : public Base { ... }; 
QSharedPointer<Base> base... 

QSharedPointer<Derived> derived = qSharedPointerDynamicCast<Derived>(base); 

Ci sono anche gli equivalenti del static_cast (come mostrato in silico), qobject_cast e const_cast. Scegli il tuo veleno.