【问题标题】:Template inheritance from base class and return types从基类和返回类型继承模板
【发布时间】:2012-06-09 10:59:26
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    也许您应该在“class calcDinamica”之前添加“template&lt;class T&gt;”并在“class calcolatrice:public calcDinamica”之后添加“&lt;T&gt;

    【讨论】:

    • 谢谢,但不,如果我这样做,基类的目的将失去,它变得无用。该纯基类的唯一目的是我可以声明一个没有 T 类型的指针,例如: calcDinamica* test;然后当我知道我想使用什么类型时,我使用 test=new calcolatrice 创建新项目。然后,如果我使用 test->somma();它可以工作,但是如果不对“测试”指针进行动态转换,我就找不到一种方法来检索内部数据。我想找到一种类似 somma() 的方法,能够将 calcolatrice 的私有数据还给我。
    • 好的,我知道。尝试'class calcDinamica { public: virtual void somma() =0;虚空 creaPrimo() =0; template virtual T* ritornaPrimo()const{cout
    • 我已经尝试过了,很遗憾:错误:模板可能不是“虚拟的”。 :(
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2018-05-23
      • 2015-03-31
      • 2018-01-18
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      相关资源
      最近更新 更多