Учитывая объект, инициализированный так:
Base* a = new Derived();
Container<Base> c(a);
, где
class Base {
...
protected:
~Base();
}
class Derived : public Base {...};
template <typename T>
class Container {
private:
T* object;
public:
Container(T* o) : object(o) {}
void deleteObject() {
delete object; // Object must be casted to (unknown) derived type to call destructor.
}
};
Очевидно, что это очень упрощено от фактического кода, но вопрос в том, как мне преобразовать object
из его шаблонного типа в его фактический, производный тип (если они отличаются), который не известен?
Я не могу изменить Base
или Derived
, или даже любой код, вызывающий Container
, только сам класс Container
.