Polymorphic QSharedPointer

11,565

Solution 1

Use qSharedPointerCast():

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

Or call staticCast() on the smart pointer:

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

Both versions are basically equivalent to doing static_cast on raw pointers.

Solution 2

For a dynamic cast, use qSharedPointerDynamicCast:

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

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

There are also equivalents for static_cast (as in silico showed), qobject_cast and const_cast. Pick your poison.

Share:
11,565
metdos
Author by

metdos

"The spiritual quest for elegance can turn the hacker into an artist."

Updated on June 04, 2022

Comments

  • metdos
    metdos almost 2 years

    I'm trying to use QSharedPointer in my polymorphic stucture, but I couldn't find right syntax to convert pointer of base class to pointer of derived class.

    struct Switch : State {
     int a;
    };
    
    QSharedPointer <State> myState=QSharedPointer <State>(new Switch);  
    
    QSharedPointer <Switch> mySwitchTest= ??? myState;
    

    What should I put in the place of ???