我有一个基本模型,我已经实现了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
访问项目时都进行类型转换。或者在制作一个公共类以便以后派生时,还有另一种方法(更好的做法)。
谢谢,
答案 0 :(得分:1)
当BaseItem
拥有虚拟方法且DerivedItem
仅覆盖BaseItem
的现有成员时,您应该可以调用
foreach(BaseItem* item, list){
item->foo();
}
由于多态性,item->foo()
会调用DerivedItem::foo()
,如果属于该类型,则会调用BaseItem::foo()