我有一棵树,用于存储不同类型的值,例如int
,double
,string
或其他。有一个Base
类实现了基本树功能(子,父)和派生类template<class T> class Derived: public Base
,其中T
是要存储的值的类型。它有一个get函数来返回参数(返回类型T
的模板函数)
我正在使用Qt
进行用户界面,因此需要实现QAbstractItemModel
才能查看我的树。子类化QAbstractItemModel
时,我需要能够调用get
类的Derived
函数,但我只有一个指向该类实例的指针(我从{{{ 1}}),并且不知道它的类型,因此我可以将指针转换为QAbstractItemModel
,但这不允许我调用Base
函数。有没有办法从get
类指针中找到Derived
类的类型?
答案 0 :(得分:-1)
您的树不存储 不同 类型的值,它根据模板实例存储相同类型(int,double,carottes,cabages)的值。 这与使用QVariant树或任何可代理对象到多态类非常不同。
模板沿着用法传播直到实际实例化。您需要创建一个源自QAbstractItemModel的T模板类,您将实例化与T类型相关的。
template <typename T> class MyCustomItemModel : public QAbstractItemModel;
//...
Tree<Cabagge> MyCabaggeTree;
MyCustomModel<Cabagge> MyCabaggeModel;