2010-08-17 9 views
16

Ich versuche QSharedPointer in meiner polymorphen Struktur zu verwenden, aber ich konnte nicht richtige Syntax finden, um den Zeiger der Basisklasse in Zeiger der abgeleiteten Klasse zu konvertieren.Polymorphe QSharedPointer

struct Switch : State { 
int a; 
}; 

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

QSharedPointer <Switch> mySwitchTest= ??? myState; 

Was sollte ich an Stelle von ???

Antwort

22

Verwendung qSharedPointerCast():

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

Oder staticCast() auf der Smart-Pointer nennen:

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

Beide Versionen sind im Grunde gleichwertig static_cast auf rohen Zeigern zu tun.

11

Für eine dynamische Umwandlung verwenden qSharedPointerDynamicCast:

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

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

Es kann auch für static_cast Äquivalente sind (wie in silico gezeigt), und qobject_cast const_cast. Wähle dein Gift.