Полиморфный QSharedPointer
Я пытаюсь использовать QSharedPointer
в своей полиморфной структуре, но я не смог найти правильный синтаксис для преобразования указателя базового класса на указатель производного класса.
struct Switch : State {
int a;
};
QSharedPointer <State> myState=QSharedPointer <State>(new Switch);
QSharedPointer <Switch> mySwitchTest= ??? myState;
Что я должен поставить вместо???
Ответы
Ответ 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. Выберите свой яд.