在不知道类型的情况下,将基类的指针转换为派生模板类

时间:2018-05-23 10:43:26

标签: c++ qt class data-structures

我有一棵树,用于存储不同类型的值,例如intdoublestring或其他。有一个Base类实现了基本树功能(子,父)和派生类template<class T> class Derived: public Base,其中T是要存储的值的类型。它有一个get函数来返回参数(返回类型T的模板函数)

我正在使用Qt进行用户界面,因此需要实现QAbstractItemModel才能查看我的树。子类化QAbstractItemModel时,我需要能够调用get类的Derived函数,但我只有一个指向该类实例的指针(我从{{{ 1}}),并且不知道它的类型,因此我可以将指针转换为QAbstractItemModel,但这不允许我调用Base函数。有没有办法从get类指针中找到Derived类的类型?

1 个答案:

答案 0 :(得分:-1)

您的树不存储 不同 类型的值,它根据模板实例存储相同类型(int,double,carottes,cabages)的值。 这与使用QVariant树或任何可代理对象到多态类非常不同。

模板沿着用法传播直到实际实例化。您需要创建一个源自QAbstractItemModel的T模板类,您将实例化与T类型相关的。

template <typename T> class MyCustomItemModel : public QAbstractItemModel;

//...
Tree<Cabagge> MyCabaggeTree;
MyCustomModel<Cabagge> MyCabaggeModel;