Здравствуйте, Кодт, Вы писали:
А>>Через внешний полиморфизм в контейнер помещаются объекты разных типов. Необходимо обеспечить возможность удаления из контейнера, зная исходный объект. Пока единственное, что смог придумать — использовать void *. Нет ли элегантного решения?
К>Что-то в твоём коде не видно void*.
Эта часть кода закомментирована:
// virtual bool is_equal(void *pure_) = 0;
// virtual bool is_equal(void *pure_)
// {
// return (_pure == pure_);
// }
Проблема в том, как без void * найти элемент контейнера (для последующего удаления), соответствующий, например p1.
К>А так, в принципе, нормальное решение.
А мне вот void * спать спокойно не даёт
К>Единственный момент — это как организовывать интерфейс
К>- на абстрактном базовом классе и шаблонном наследнике (твой подход)
К>- на таблицах функций в каждом экземпляре
К>- — рукодельных
К>- — стандартных
Реальные методы, которые я упростил до foo1() и foo2(), имеют в качестве аргументов итераторы, т.е. шаблонные, поэтому мой вариант предпочтительнее.