【问题标题】: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 的等价物。选择你的毒药。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        • 2017-06-09
        • 2016-11-06
        • 2011-04-22
        相关资源
        最近更新 更多