Возможен ли полиморфизм для темплейтов?
можно ли наследовать темплату от базового класса после чего создать темплейтный объект и привести к базовому классу.
Вот код темплаты
struct CBaseCal{
virtual void cal() = 0;
};
template <class T>
class CSeqLess: CBaseCal {
public:
CSeqLess(T* pRight, T* pLeft) : m_pRight(pRight), m_pLeft(pLeft) {};
virtual ~CSeqLess(){};
virtual inline void cal() {m_cRes.setVal(m_pRight->getVal() > m_pLeft->getVal());}
inline CSBool* getRes() {return &m_cRes;};
protected:
T* m_pRight;
T* m_pLeft;
CSBool m_cRes;
};
а вот код который не работает
CSeqPlus<CSReal>* prPlus = new CSeqPlus<CSReal>(prX, prY);
CBaseCal* cp = dynamic_cast<CBaseCal*>(prPlus);
выдает ошибку компилирования
'CBaseCal' is inaccessible base of 'CSeqPlus<CSReal>'
Здравствуйте, <Аноним>, Вы писали:
А>А>template <class T>
А>class CSeqLess: public CBaseCal {
А>
А>а вот код который не работает
А>выдает ошибку компилирования
А>'CBaseCal' is inaccessible base of 'CSeqPlus<CSReal>'
Вот так попробуй
.
... << RSDN@Home 1.2.0 alpha rev. 619>>
Здравствуйте, <Аноним>, Вы писали:
А>Возможен ли полиморфизм для темплейтов?
А>можно ли наследовать темплату от базового класса после чего создать темплейтный объект и привести к базовому классу.
А>Вот код темплаты
А>template <class T>
А>class CSeqLess: public CBaseCal
А>{
А>public:
А> CSeqLess(T* pRight, T* pLeft) : m_pRight(pRight), m_pLeft(pLeft) {};
А> virtual ~CSeqLess(){};
А> virtual inline void cal() {m_cRes.setVal(m_pRight->getVal() > m_pLeft->getVal());}
А> inline CSBool* getRes() {return &m_cRes;};
А>protected:
А> T* m_pRight;
А> T* m_pLeft;
А> CSBool m_cRes;
А>};
А так?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Глеб Алексеев, Вы писали:
ГА>Здравствуйте, <Аноним>, Вы писали:
А>>А>>template <class T>
А>>class CSeqLess: public CBaseCal {
А>>
А>>а вот код который не работает
А>>выдает ошибку компилирования
А>>'CBaseCal' is inaccessible base of 'CSeqPlus<CSReal>'
ГА>Вот так попробуй .
спасиба, работает, я просто прогнал, думал что это что-то с темплатами