2010-08-17 15 views
16

J'essaie d'utiliser QSharedPointer dans ma structure polymorphique, mais je n'ai pas trouvé de syntaxe correcte pour convertir le pointeur de la classe de base en pointeur de classe dérivée.Polymorphic QSharedPointer

struct Switch : State { 
int a; 
}; 

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

QSharedPointer <Switch> mySwitchTest= ??? myState; 

Que devrais-je mettre à la place de ???

Répondre

22

Utilisation qSharedPointerCast():

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

ou appelez staticCast() sur le pointeur intelligent:

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

Les deux versions sont essentiellement équivalentes à faire static_cast sur les pointeurs premières.

11

Pour une distribution dynamique, utilisez qSharedPointerDynamicCast:

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

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

Il y a aussi équivalents pour static_cast (comme dans silico a montré), qobject_cast et const_cast. Choisis ton poison.