virtual operator==
От: Аноним  
Дата: 13.11.09 17:51
Оценка:
Здрасьте, народ!

Наткнулся на такое:
1. Есть виртуальный базовый класс: А.
2. Есть наследнкики класса А: B,C,D... (любых видов наследования в том числе и ромбового).
3. Есть шаблонный класс реализующий тип "множество". T
4. В программе используются соотвественно указатели на базоывй класс A: T<A*> set1;

Нужно реализовать в шаблонном классе Т проверку того, что бы небыло одинаковых элементов в множестве.

Делаю так: объявил виртуальный оператор == в базовом классе как чистый.
Ну а далее тоже переопределил для наследников. Потом столкнулся с тем, что базовый указатель не имеет доступ к методам наследников, чтобы сравнить значения на совпадения. Пробовал dynamic_cast тоже не срабатывает..
Как такое решать?
Кроме того непонятно совершенно как решать такую задачу на проверку совместимости в шаблоне: мы знаем что типы могут быть указателями или переменные.
так что если я напишу:
bool T<t>::add(t element)
{
...
if(*s==*element)
return false; //элемент уже имеется в множестве
...
return true; //элемент успешно вставлен в множество
}

то для случая T<A*> set; код будет верен а для случая T<int> ошибочно.
Кто подскажет как реализовать более грамотно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.