Наследование от шаблонного класса
От: Jaakko Беларусь  
Дата: 14.02.11 12:46
Оценка:
Привет.
Есть шаблонный класс, который описывает enumerator (перечеслитель? не знаю, как корректнее его назвать по-русски)):
template <typename TExternal, typename TInternal = TExternal,
    class TBaseInterface = IEnumerator<TExternal>,
    class TBaseContainer = std::vector<TInternal> >
class CEnumeratorExt : public TBaseInterface

Параметрами шаблона-класса являются:
1. тип принимаемых данных (TExternal).
2. тип хранимых данных (TInternal) — по умолчанию тот же, что и тип принимаемых данных.
3. тип базового интерфейса (TBaseInterface) — набор методов у всех возможных базовых интерфейсов одинаковы, но нельзя сделать единый базовый и от него напрямую наследоваться. По умолчанию — интерфейс, используемый в текущем модуле.
4. тип контейнера (TBaseContainer) — по умолчанию — вектор.

Enumerator'ов в итоге много, они различаются слабо и писать для каждого свой класс — лень, поэтому такой шаблон.
Как правило все Enumerator'ы в качестве контейнера используют вектор, поэтому методы этого шаблонного класса оперируют с вектором (push_back(), back() и всё такое).
Всё бы ничего, но есть несколько классов, которым в качестве контейнера нужен не вектор, а std::set.
Я сделал классы, которые наследуются от приведённого выше шаблона и переопределил нужные методы, но ошибка вылезла в методах шаблона — на тех самых push_back() и back(), мол, нет таких методов у контейнера.

Вопрос — как указать, что методы шаблона не должны компилироваться (специализироваться?), если есть дочерний класс, который переопределяет эти методы.
Как-то так.
Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.