0

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

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 < matrix > ,因为当我将计算器与 QT 一起使用时,我可以更改我想要操作的操作数的类型(如向量或矩阵)。

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

提前致谢。

4

2 回答 2

0

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

于 2012-06-09T14:24:04.663 回答
0

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

于 2012-06-09T13:09:28.123 回答