У меня есть следующие классы шаблонов: Мне нужно выяснить, как реализовать оператор преобразования между производными классами шаблонов.Оператор преобразования между шаблонами, производными классами
template<class T>
class Base
{
public:
Base() { }
template <class U>
operator Base<U>()
{
return Base<U> (v);
}
virtual double getV() = 0;
};
class D1: public Base<D1>
{
public:
D1(int j)
{
i = j;
}
double getV() const { return i; }
template <class U>
operator Base<U>()
{
return Base<U>(getV());
}
private:
int i;
};
class D2: public Base<D2>
{
public:
D2(int j)
{
i2 = j;
}
double getV() const { return i2; }
template <class U>
operator Base<U>()
{
return Base<U>(getV());
}
private:
int i2;
};
Как я могу достичь следующего?
D1 d1(3);
D2 d2 = d1; //conversion from 'D1' to non-scalar type 'D2' requested
Если сам дизайн звучит или я должен делать что-то еще?
Пожалуйста, дайте мне знать, что ур мысли
две проблемы: 1) у вас в классе '' Base' виртуальный ИНТ getV() ', но в его производных классов это' INT getV() const' (другая функция). 2) Вы не можете вернуть экземпляр абстрактного класса (из оператора преобразования в 'Base'). – dyp
@DyP это была опечатка, исправленная 1, для вопроса 2, компилятор не возражает об этом – user3113652
* «компилятор не возражает об этом» * возможно, потому что он не может знать в этой точке, если существуют специализации «Base » 'которые не являются абстрактными. Однако, если эта функция создана для базы Base , которая является абстрактной, компилятор должен жаловаться. – dyp