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

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Шаблон-предок получает класс потомка

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

Фоб » 24 дек 2007, 17:11

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

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

Фоб » 24 дек 2007, 14:15

Спасибо, нашёл подсказку в atlvcl.h
Правильно вот так:

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

template <class Der>
class Base{
};

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

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

WinMain » 24 дек 2007, 11:37

В шаблонах ATL такие конструкции повсеместно используются.

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

Фоб » 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>{       
	// ...
};
Но нужно, чтоб непременно класс-наследник был также шаблоном (поскольку это класс-контейнер элементов неизвестного наперёд типа).

Вернуться к началу