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

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

struct Switch : State {
 int a;
};

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

QSharedPointer <Switch> mySwitchTest= ??? myState;

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

16
задан metdos 22 October 2015 в 08:06
поделиться

2 ответа

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

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

Или вызовите staticCast () для интеллектуального указателя:

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

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

25
ответ дан 30 November 2019 в 16:41
поделиться

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

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

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

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

12
ответ дан 30 November 2019 в 16:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: