繁体   English   中英

将派生的 QList 转换为基类的 QList

[英]Cast QList of derived to QList of base

我有这些课程:

class IParameter {};
class ModuleParameter : public IParameter {};

现在我有派生的 QList:

QList<ModuleParameter*> list;

当我投射单个项目时,没关系:

IParameter *p = list[0]; // ok

当我投射列表时,我遇到了错误。

QList<IParameter*> *list = static_cast<QList<IParameter*>*>(&list);

Invalid static_cast from type QList<ModuleParameter*>* to type QList<IParameter*>*

那么,我该如何投呢?

如果你真的想要一个 QList<IParameter*>,你可以做这样的事情:

    QList<A*> la;
    QList<B*> lb;
    ...
    std::transform(lb.cbegin(),
                   lb.cend(),
                   std::back_inserter(la),
                   [=](B* b)
    {
        return static_cast<A*>(b);
    });

QList是不常见的基类型和模板QList<ModuleParameter*>是一类无关QList<IParameter*>则无法访问QList<ModuleParameter*>多晶型通过一个指向QList<IParameter*> 你试图做的事情是不可能以这种方式做到的。

相反,您可以将指向ModuleParameter指针存储在QList<IParameter*>并在访问它们时使用 cast。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM