我正在尝试做一些非常类似的事情。我可能误解了一些基本的编程规则,但是理解为什么这不起作用的任何帮助都会受到赞赏。我也想知道如何让这样的事情发生:
要清楚我想调用C.RecursiveMethod()然后调用B.RecursiveMethod()然后调用A.RecursiveMethod()然后命中基本情况并因此解开。实际上最终发生的是C.RecursiveMethod()调用C.RecursiveMethod(),它调用C.RecursiveMethod()直到世界末日。
提前致谢,对不起,如果我吮吸,这是我的第一篇文章。
class A
{
void RecursiveMethod()
{
if (typeid(*this) == typeid(A))
// Base case
else
SUPER::RecursiveMethod() // The problem lies here
// Do stuff
};
};
class B : A
{
typedef A SUPER;
};
class C : B
{
typedef B SUPER;
};
A.RecursiveMethod(); // Works, base case only
C.RecursiveMethod(); // Infinite loop
// this pointer is always of type C
// Also tried in vain:
// this->SUPER::RecursiveMethod()
// SUPER* superCast = dynamic_cast<SUPER*>(this); superCast->RecursiveMethod();
答案 0 :(得分:0)
您需要为所有类创建RecursiveMethod()的重载。如同奇怪的说法,你的指针:if (typeid(*this) == typeid(A))
总是指向同一个类,因此无限循环