我有這些課程:
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*>*.
那么,我該如何投呢?
uj5u.com熱心網友回復:
如果你真的想要一個 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);
});
uj5u.com熱心網友回復:
QList是一個沒有公共基型別別的模板,并且QList<ModuleParameter*>是一種與 無關的型別QList<IParameter*>,您不能通過QList<ModuleParameter*>指向 的指標進行多型訪問QList<IParameter*>。你試圖做的事情是不可能這樣做的。
相反,您可以存盤指向ModuleParameterin 的指標QList<IParameter*>并在訪問它們時使用 cast。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/359392.html
上一篇:C 獲取樹的最低級別
