Страница 1 из 1

Шаблон-предок получает класс потомка

Добавлено: 22 дек 2007, 15:44
Фоб
Вопрос по конструкции типа:

Код: Выделить всё

template <class Der>
class Base{
	// объект хранит операции над данными наследников, класс которых передаётся переменной <Der>
};

// описываю один из шаблонов наследников класса Base:

template <class C>                 
class Derived: public Base<Derived>{       
	// ...
};
Может, есть у кого-нибудь опыт практического использования таких конструкций?

Дело в том, что у меня это не компилируется, с жалобой "Cannot generate template specialization from Base<Der>"

Вроде бы должна работать, но что не так?

Например, вот так работает:

Код: Выделить всё

template <class Der>
class Base{
	// объект хранит операции над данными наследников, класс которых передаётся переменной <Der>
};

// описываю один из наследников класса Base:

class Derived: public Base<Derived>{       
	// ...
};
Но нужно, чтоб непременно класс-наследник был также шаблоном (поскольку это класс-контейнер элементов неизвестного наперёд типа).

Re: Шаблон-предок получает класс потомка

Добавлено: 24 дек 2007, 11:37
WinMain
В шаблонах ATL такие конструкции повсеместно используются.

Re: Шаблон-предок получает класс потомка

Добавлено: 24 дек 2007, 14:15
Фоб
Спасибо, нашёл подсказку в atlvcl.h
Правильно вот так:

Код: Выделить всё

template <class Der>
class Base{
};

template <class C>
class Derived: public Base< Derived<C> >{
};

Re: Шаблон-предок получает класс потомка

Добавлено: 24 дек 2007, 14:31
Romeo
Логично :)

Re: Шаблон-предок получает класс потомка

Добавлено: 24 дек 2007, 17:11
Фоб
Ах, не смейтесь, конечно логично! Прям стыдно, что так просто разрешаются мои проблемки. :) Обещаю впредь больше думать, прежде чем спрашивать. Но вы тут так все всё знаете, соблазн велик, когда что-то не получается.