gpt4 book ai didi

c++ - 访问 QList 中的派生类时的最佳实践

转载 作者:行者123 更新时间:2023-11-28 06:18:32 29 4
gpt4 key购买 nike

我有一个基本模型,我在其中实现了 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 中的项目时进行类型转换。或者在制作一个以后派生的公共(public)类时是否有另一种方法(更好的做法)。

谢谢,

最佳答案

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

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

由于多态性,item->foo() 将调用 DerivedItem::foo() 如果它是该类型,否则将调用 BaseItem: :foo()

关于c++ - 访问 QList 中的派生类时的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29762804/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com