使用带有typeid的继承树进行C ++递归会导致此指针出现问题

时间:2016-06-03 18:22:39

标签: c++ recursion this typeid

我正在尝试做一些非常类似的事情。我可能误解了一些基本的编程规则,但是理解为什么这不起作用的任何帮助都会受到赞赏。我也想知道如何让这样的事情发生:

要清楚我想调用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();

1 个答案:

答案 0 :(得分:0)

您需要为所有类创建RecursiveMethod()的重载。如同奇怪的说法,你的指针:if (typeid(*this) == typeid(A))总是指向同一个类,因此无限循环