长期读者第一次在这里问

我正在尝试通过从外部库继承来扩展其功能。

在库中有一个基类,一个基类派生自该基类并实现了一些底层函数,然后有一个我从后者派生的实现。

以下是实现的简单概念化代码示例:

基类:

 class A {

    virtual int vf() = 0;

    int get_next(){
        return vf() * 2;
    }
};

派生类:
class B : public A {

    virtual int vf(){
        return 1;
    }

};

我对图书馆的扩展:
class C : public B {

    int vf(){
        return B::get_next() + 1;
    }

};

然后我要 call :
C::get_next();

但这会导致递归函数调用:
C::get_next() = A::get_next() -> C::vf() -> A::get_next() -> C::vf() -> A::get_next() -> C::vf() -> A::get_next() -> C::vf() ... and so on

我想发生的事情:
C::get_next() = A::get_next() -> C::vf() -> A::get_next() -> B::vf() end of call trace

这可能吗?我在实现中做错了什么,还是遇到了一些未定义的行为或类似行为?

最佳答案

B::get_next()在该函数内部仍然具有动态分配。

如果可能且适当,您可以 slice 您的对象:

class C : public B {

    int vf() override
    {
        return B(*this).get_next() + 1;
    }
};

10-06 05:04