Я пытаюсь использовать QSharedPointer
в моей полиморфной структуре, но я не смог найти правильный синтаксис для преобразования указателя базового класса в указатель производного класса.
struct Switch : State {
int a;
};
QSharedPointer <State> myState=QSharedPointer <State>(new Switch);
QSharedPointer <Switch> mySwitchTest= ??? myState;
Что я должен поставить вместо ???
Используйте qSharedPointerCast ()
:
QSharedPointer <Switch> mySwitchTest= qSharedPointerCast<Switch>(myState);
Или вызовите staticCast ()
для интеллектуального указателя:
QSharedPointer <Switch> mySwitchTest= myState.staticCast<Switch>();
Обе версии в основном эквивалентны выполнению static_cast
для необработанных указателей.
Для динамического приведения используйте qSharedPointerDynamicCast:
class Derived : public Base { ... };
QSharedPointer<Base> base...
QSharedPointer<Derived> derived = qSharedPointerDynamicCast<Derived>( base );
Существуют также эквиваленты для static_cast (как показано in silico), qobject_cast и const_cast. Выбрать свой яд.