长期读者第一次在这里问
我正在尝试通过从外部库继承来扩展其功能。
在库中有一个基类,一个基类派生自该基类并实现了一些底层函数,然后有一个我从后者派生的实现。
以下是实现的简单概念化代码示例:
基类:
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;
}
};