Полиморфный QSharedPointer - PullRequest
       21

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

16 голосов
/ 17 августа 2010

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

struct Switch : State {
 int a;
};

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

QSharedPointer <Switch> mySwitchTest= ??? myState;

Что мне поставитьна месте ???

Ответы [ 2 ]

24 голосов
/ 17 августа 2010

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

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

Или позвоните по умному указателю staticCast():

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

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

12 голосов
/ 17 августа 2010

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

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

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

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

...