首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将派生的QList转换为基本的QList

将派生的QList转换为基本的QList
EN

Stack Overflow用户
提问于 2021-11-10 06:11:18
回答 2查看 55关注 0票数 0

我有以下几个类:

代码语言:javascript
复制
class IParameter {};
class ModuleParameter : public IParameter {};

现在我有了派生的QList:

代码语言:javascript
复制
QList<ModuleParameter*> list;

当我投射单项时,这是可以的:

代码语言:javascript
复制
IParameter *p = list[0]; // ok

当我转换列表时,我得到了一个错误。

代码语言:javascript
复制
QList<IParameter*> *list = static_cast<QList<IParameter*>*>(&list);

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

那么,我该如何选角呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-10 06:32:19

QList是一个没有公共基类类型的模板,而QList<ModuleParameter*>是一个与QList<IParameter*>无关的类型,您不能通过指向QList<IParameter*>的指针以多态方式访问QList<ModuleParameter*>。你想要做的事情是不可能这样做的。

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

票数 2
EN

Stack Overflow用户

发布于 2021-11-10 07:03:47

如果你真的想要一个QList,你可以这样做:

代码语言:javascript
复制
    QList<A*> la;
    QList<B*> lb;
    ...
    std::transform(lb.cbegin(),
                   lb.cend(),
                   std::back_inserter(la),
                   [=](B* b)
    {
        return static_cast<A*>(b);
    });
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69908612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档