Подтвердить что ты не робот

Полиморфный QSharedPointer

Я пытаюсь использовать QSharedPointer в своей полиморфной структуре, но я не смог найти правильный синтаксис для преобразования указателя базового класса на указатель производного класса.

struct Switch : State {
 int a;
};

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

QSharedPointer <Switch> mySwitchTest= ??? myState;

Что я должен поставить вместо???

4b9b3361

Ответ 1

Используйте qSharedPointerCast():

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

Или вызовите staticCast() на смарт-указатель:

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

Обе версии в основном эквивалентны выполнению static_cast для сырых указателей.

Ответ 2

Для динамического переноса используйте qSharedPointerDynamicCast:

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

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

Существуют также эквиваленты для static_cast (как показано в силиконе), qobject_cast и const_cast. Выберите свой яд.