Привести указатель базового класса к производному шаблонному классу, не зная типа - PullRequest
0 голосов
/ 23 мая 2018

У меня есть дерево, которое используется для хранения значений различных типов, например, int, double, string или что-то еще.Существует класс Base, который реализует базовую функциональность дерева (дочерние элементы, родители) и производный класс template<class T> class Derived: public Base, где T - это тип значения, которое будет сохранено.Он имеет функцию get для возврата параметров (шаблонная функция, возвращающая тип T)

Я делаю пользовательский интерфейс с Qt и, следовательно, должен реализовать QAbstractItemModel для просмотрамое деревоПри создании подкласса QAbstractItemModel мне нужно иметь возможность вызывать функцию get моего класса Derived, но у меня есть только указатель на экземпляр класса (который я получаю из QAbstractItemModel), и don 'Я не знаю его тип, поэтому я могу привести указатель к Base, но это не позволяет мне вызывать функцию get.Есть ли способ найти тип моей Derived формы класса Base указатель класса?

1 Ответ

0 голосов
/ 30 мая 2018

Ваше дерево не хранит значения другого типа , оно хранит значения одного и того же типа (int, double, carottes, cabages) в зависимости от создания шаблона.Это очень отличается от наличия дерева QVariant или любого проксируемого объекта и полиморфного класса.

Шаблон распространяется по мере использования до фактической реализации.Вам нужно создать шаблонный класс T, производный от QAbstractItemModel, который вы создадите, связанный с типом T.

template <typename T> class MyCustomItemModel : public QAbstractItemModel;

//...
Tree<Cabagge> MyCabaggeTree;
MyCustomModel<Cabagge> MyCabaggeModel; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...