我的项目有些问题。这是一些代码:
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。
提前致谢。
答案 0 :(得分:0)
也许您应该在“template<class T>
”之前添加“class calcDinamica
”,并在“<T>
”之后添加“class calcolatrice:public calcDinamica
”
答案 1 :(得分:0)
如果您使用多种类型,则必须为所有类型的表达式实现单个基类,并在AST中使用它,并对所有计算的表达式执行类型检查。