Возможен ли полиморфизм для темплейтов?
От: Аноним  
Дата: 28.11.05 10:35
Оценка:
Возможен ли полиморфизм для темплейтов?
можно ли наследовать темплату от базового класса после чего создать темплейтный объект и привести к базовому классу.

Вот код темплаты

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>'
Re: Возможен ли полиморфизм для темплейтов?
От: Глеб Алексеев  
Дата: 28.11.05 10:38
Оценка:
Здравствуйте, <Аноним>, Вы писали:
А>
А>template <class T>
А>class CSeqLess: public CBaseCal {
А>

А>а вот код который не работает
А>выдает ошибку компилирования
А>'CBaseCal' is inaccessible base of 'CSeqPlus<CSReal>'
Вот так попробуй .
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re: Возможен ли полиморфизм для темплейтов?
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 28.11.05 10:39
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Возможен ли полиморфизм для темплейтов?

А>можно ли наследовать темплату от базового класса после чего создать темплейтный объект и привести к базовому классу.

А>Вот код темплаты


А>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>>
HgLab: Mercurial Server and Repository Management for Windows
Re[2]: Возможен ли полиморфизм для темплейтов?
От: Аноним  
Дата: 28.11.05 10:41
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:

ГА>Здравствуйте, <Аноним>, Вы писали:

А>>
А>>template <class T>
А>>class CSeqLess: public CBaseCal {
А>>

А>>а вот код который не работает
А>>выдает ошибку компилирования
А>>'CBaseCal' is inaccessible base of 'CSeqPlus<CSReal>'
ГА>Вот так попробуй .

спасиба, работает, я просто прогнал, думал что это что-то с темплатами
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.