Russian Qt Forum

Программирование => С/C++ => Тема начата: Azazello от Февраль 06, 2020, 19:57



Название: 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
Ну "рекурсивные" темплейты это стандартная фича, смотрится конечно неадекватно, но люди пользуются