Можно ли реализовать шаблон класса таким образом, чтобы один объект мог быть приведен к другому, если их аргументы шаблона связаны между собой? Вот пример, чтобы показать идею (конечно, она не скомпилируется):
struct Base {};
struct Derived : Base {};
template <typename T> class Foo {
virtual ~Foo() {}
virtual T* some_function() = 0;
};
Foo<Derived>* derived = ...;
Foo<Base>* base = derived;
Дополнительная проблема заключается в том, что Foo является абстрактным классом, используемым в качестве интерфейса, содержащего функции, возвращающие T & и T *, поэтому я не могу реализовать конструктор копирования шаблона.
Я пишу универсальный класс Iterator, который может содержать любой итератор STL, и в дополнение к стиранию типов я хотел бы, чтобы он был полиморфным, то есть я мог бы написать что-то вроде этого:
std::list<Derived> l;
MyIterator<Base> it(l.begin());
UPD: Это была моя ошибка, мне фактически не нужно было приводить Foo * к Foo * для реализации MyIterator, поэтому я думаю, что вопрос больше не актуален.