Re[3]: Удаление из контейнера внешеполиморфных объектов
От: Кодт Россия  
Дата: 26.09.09 14:15
Оценка:
Здравствуйте, Аноним 955, Вы писали:

К>>Что-то в твоём коде не видно void*.


А9>Эта часть кода закомментирована:


А9>
А9>//    virtual bool is_equal(void *pure_)
А9>//    {
А9>//        return (_pure == pure_);
А9>//    }
А9>


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

А9>Проблема в том, как без void * найти элемент контейнера (для последующего удаления), соответствующий, например p1.


А9>Реальные методы, которые я упростил до foo1() и foo2(), имеют в качестве аргументов итераторы, т.е. шаблонные, поэтому мой вариант предпочтительнее.


Нужно было с самого начала сказать, что у тебя мультиметод (полиморфный по двум аргументам — элементу контейнера и искомому значению).
Понятно, что во время исполнения шаблоны уже не помогут. Значит, нужно смотреть, как ту же самую задачу решать без шаблонов. Способов много — хоть двойная диспетчеризация, хоть вообще вариантные типы (boost::any). Но это уже надо на суть методов fooNNN смотреть.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.