#include <iostream>
using namespace std;
class Base {
public:
Base() {};
~Base() {};
};
template<class T>
class Derived: public Base {
T _val;
public:
Derived() {}
Derived(T val): _val(val) {}
T raw() {return _val;}
};
int main()
{
Base * b = new Derived<int>(1);
Derived<int> * d = b;
cout << d->raw() << endl;
return 0;
}
У меня есть некоторая проблема полиморфизма прямо сейчас, и приведенный выше код суммирует все. Я создал указатель Base-класса, и я поместил в него указатель нового производного шаблона. Затем я создал новый указатель для производного класса шаблона, и я хочу, чтобы он имел ссылку, на которую указывает указатель базового класса. Хотя базовый указатель (b) указывает на Derived, ссылка не может быть передана указателю Derived класса (d), поскольку there no known conversion from Base * to Derived<int> *
(как компилятор говорит).
Итак, есть ли трюк или альтернативный способ сделать это? Спасибо заранее.