在QList中加入派生类时的最佳实践

时间:2015-04-21 04:15:32

标签: c++ qt polymorphism downcast qlist

我有一个基本模型,我已经实现了QAbstractItemModel的虚拟成员。然后,我根据需要在项目中使用我的基本模型,派生具有特定的新类。

class BaseModel : public QAbstractItemModel{
    public:
        ...

    protected:
        QList<BaseItem*> list;
}

class DerivedModel : public BaseModel{
    public:
        ...
}

class DerivedItem : public BaseItem{
    public:
        ...
}

我的派生模型使用DerivedItem个对象来存储具有BaseItem没有的特定内容的数据。它们存储在list中。 BaseModel中的方法也使用list中的对象。

我的问题是因为我必须在每次从派生模型中的list访问对象时键入强制转换。我不能使用像foreach这样的宏。

在这种情况下我是否有任何提示或技巧可以使我使用宏并防止我每次从list访问项目时都进行类型转换。或者在制作一个公共类以便以后派生时,还有另一种方法(更好的做法)。

谢谢,

1 个答案:

答案 0 :(得分:1)

BaseItem拥有虚拟方法且DerivedItem仅覆盖BaseItem的现有成员时,您应该可以调用

foreach(BaseItem* item, list){
    item->foo();
}

由于多态性,item->foo()会调用DerivedItem::foo(),如果属于该类型,则会调用BaseItem::foo()