18 Stimmen

Polymorpher QSharedPointer

Ich versuche, die QSharedPointer in meiner polymorphen Struktur, aber ich konnte keine richtige Syntax finden, um Zeiger der Basisklasse in Zeiger der abgeleiteten Klasse zu konvertieren.

struct Switch : State {
 int a;
};

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

QSharedPointer <Switch> mySwitchTest= ??? myState;

Was soll ich an die Stelle von ?

27voto

In silico Punkte 49539

使用方法 qSharedPointerCast() :

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

Oder rufen Sie an staticCast() auf dem Smart Pointer:

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

Beide Versionen sind im Grunde gleichbedeutend mit static_cast auf rohe Zeiger.

13voto

Frank Osterfeld Punkte 24349

Für einen dynamischen Cast verwenden Sie qSharedPointerDynamicCast:

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

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

Es gibt auch Äquivalente für static_cast (wie in silico gezeigt), qobject_cast und const_cast. Wählen Sie Ihr Gift.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X