【问题标题】:Polymorphic QSharedPointer多态QSharedPointer
【发布时间】:2011-03-30 20:15:21
【问题描述】:
我正在尝试在我的多态结构中使用QSharedPointer,但我找不到将基类指针转换为派生类指针的正确语法。
struct Switch : State {
int a;
};
QSharedPointer <State> myState=QSharedPointer <State>(new Switch);
QSharedPointer <Switch> mySwitchTest= ??? myState;
我应该用什么代替???
【问题讨论】:
标签:
c++
qt
polymorphism
type-conversion
casting
【解决方案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(如 silico 所示)、qobject_cast 和 const_cast 的等价物。选择你的毒药。