将 derived 的 QList 转换为 base 的 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
是一个没有公共基础 class 类型的模板,而 QList<ModuleParameter*>
是与 QList<IParameter*>
无关的类型,您不能多态访问 QList<ModuleParameter*>
通过指向 QList<IParameter*>
的指针。你想做的事用这种方法是不可能的。
相反,您可以将指向 ModuleParameter
的指针存储在 QList<IParameter*>
中,并在访问它们时使用转换。
如果你真的想要一个 QList,你可以这样做:
QList<A*> la;
QList<B*> lb;
...
std::transform(lb.cbegin(),
lb.cend(),
std::back_inserter(la),
[=](B* b)
{
return static_cast<A*>(b);
});
我有这些 类:
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
是一个没有公共基础 class 类型的模板,而 QList<ModuleParameter*>
是与 QList<IParameter*>
无关的类型,您不能多态访问 QList<ModuleParameter*>
通过指向 QList<IParameter*>
的指针。你想做的事用这种方法是不可能的。
相反,您可以将指向 ModuleParameter
的指针存储在 QList<IParameter*>
中,并在访问它们时使用转换。
如果你真的想要一个 QList
QList<A*> la;
QList<B*> lb;
...
std::transform(lb.cbegin(),
lb.cend(),
std::back_inserter(la),
[=](B* b)
{
return static_cast<A*>(b);
});