Название: Template class name Отправлено: Azazello от Февраль 06, 2020, 19:57 Есть ли шаблонные решения?.
Код: template <class T> class Item { public: Item<T> parent() { return mParent;} private: Item<T> mParent; } Item<int> t1; Item<int> parent = t1.parent; //OK Ну тут все понятно, пока мы не сделаем наследование. Код: class DevItem : public Item<int> { ....... } DevItem t1; DevItem parent = t1.parent() //error - несовместимые типы Item<int> и DevItem И как? Название: Re: Template class name Отправлено: Авварон от Февраль 06, 2020, 20:08 Код: template <class T, class Derived> class Item { public: Derived parent() { return mParent;} }; class DevItem : public Item<int, DevItem > {...}; В данном примере int не используется но может понадобится Возможно поможет https://github.com/ABBAPOH/textureviewer/blob/master/src/libs/utils/treemodelitem.h Название: Re: Template class name Отправлено: Azazello от Февраль 06, 2020, 22:28 В данном примере int не используется но может понадобится Возможно поможет https://github.com/ABBAPOH/textureviewer/blob/master/src/libs/utils/treemodelitem.h int использован для примера как самый короткий тип. И, конечно же, это фрагмент дерева. Просто возникало чувство неловкости при написании. class DevItem : public Item<int, DevItem > {...}; Какое-то масло маслянное. Уже ушло. Спасибо за ответ. P.S. Уважамс! Хватает же терпения на осмысленные название комитов. Название: Re: Template class name Отправлено: Авварон от Февраль 06, 2020, 22:32 Ну "рекурсивные" темплейты это стандартная фича, смотрится конечно неадекватно, но люди пользуются
|