我有以下几个类:
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*>*。
那么,我该如何选角呢?
发布于 2021-11-10 06:32:19
QList是一个没有公共基类类型的模板,而QList<ModuleParameter*>是一个与QList<IParameter*>无关的类型,您不能通过指向QList<IParameter*>的指针以多态方式访问QList<ModuleParameter*>。你想要做的事情是不可能这样做的。
相反,您可以将指向ModuleParameter的指针存储在QList<IParameter*>中,并在访问它们时使用cast。
发布于 2021-11-10 07:03:47
如果你真的想要一个QList,你可以这样做:
QList<A*> la;
QList<B*> lb;
...
std::transform(lb.cbegin(),
lb.cend(),
std::back_inserter(la),
[=](B* b)
{
return static_cast<A*>(b);
});https://stackoverflow.com/questions/69908612
复制相似问题