【问题标题】:how can we use template with virtual function for abstraction in cpp?我们如何在 cpp 中使用带有虚函数的模板进行抽象?
【发布时间】:2021-08-08 18:14:36
【问题描述】:

不幸的是,我遇到了一个挑战,因为我不能同时使用抽象和模板。这个想法是尽可能保持父类的通用性,因此我们将两个成员函数的通用形式作为抽象放在父类中。 然后,我想在子类中定义我想要的这些函数。但是,当我想要保留父模板时,问题就出现了,即使在子类的声明之后也不要让它,只要我去子类。如果有的话,请有人告诉我一个解决方案吗?

template <class y2>
class parrennt
{
    public:
    y2 numb;
    virtual y2 funcc3()=0;
    virtual y2 funcc4()=0;

};

template <class y2>
class chilld : public parrennt <double> // I want to keep it <class y2> if its possible
{
    public:
    virtual y2 funcc3 () { return numb*2;}
    virtual y2 funcc4 () { return numb*3;}

};


【问题讨论】:

  • 所以你想要class chilld : public parrennt &lt;y2&gt;

标签: c++ templates inheritance


【解决方案1】:

在基类成员的名称查找中有一些棘手的部分——尤其是当基类依赖于模板参数时,就像这里一样。模板有两个阶段的名称查找:首先是在编译模板时,然后对于dependent names,一旦知道模板参数,就会进行额外的查找。

numb 并不明显依赖于y2,所以只会在class chilld 中查找。

解决方案非常简单。写this-&gt;numb。由于thischild&lt;y2&gt;* 类型,它依赖于y2,并且this-&gt;numb 的名称查找被延迟到知道y2 的第二阶段,还有parent&lt;y2&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多