从基类和返回类型继承模板

时间:2012-06-09 10:59:27

标签: c++ templates return-type template-inheritance

我的项目有些问题。这是一些代码:

class calcDinamica
{
public:
    virtual void somma() =0;
    virtual void creaPrimo() =0;
    virtual T* ritornaPrimo()const{cout<<"errore"<<endl;};//THIS is what i want
    virtual ~calcDinamica(){};
};

template<class T>
class calcolatrice:public calcDinamica
{
private:
    T* primoVett;  //first operand
    T* secondoVett; //second operand
    T* risultatoVett; //result
public:
    calcolatrice():primoVett(0), secondoVett(0), risultatoVett(0){};
    virtual void creaPrimo(){primoVett= new T;};
    virtual void creaSecondo(){secondoVett= new T;};
    virtual void creaRisultato(){};
    virtual void somma()
    {
        risultatoVett=new T;
        *risultatoVett=*primoVett+*secondoVett;
    };
    virtual T* ritornaPrimo()const{cout<<"giusto"<<endl;return primoVett;};
};

这段代码用于计算器,我有其他3个不同的类,我上面发布的这些类只是为了跟踪我在会话期间创建的数据,因为我用QT实现了这个。

所以,我创建了这个基础CalcDinamica只允许我有一个像calcDinamica * cal的指针;然后创建它:calc = new calcolatrice&lt;矩阵&gt; ,因为当我使用QT计算器时,我可以改变我想要操作的操作数的类型(如矢量或矩阵)。

好的,这可行,但我想在calcolatrice中返回数据,而不用calcDinamica指针做很多dynamic_cast。 我怎么能做到,或者它是不可能的?因为如果不可能,我最好留下基类的这个选项,只需创建3个不同的calcolatrice。

提前致谢。

2 个答案:

答案 0 :(得分:0)

也许您应该在“template<class T>”之前添加“class calcDinamica”,并在“<T>”之后添加“class calcolatrice:public calcDinamica

答案 1 :(得分:0)

如果您使用多种类型,则必须为所有类型的表达式实现单个基类,并在AST中使用它,并对所有计算的表达式执行类型检查。