Я пытаюсь сделать что-то очень похожее на это. Я, вероятно, недопонимаю какое-то фундаментальное правило программирования, но любая помощь в понимании того, почему это не работает, будет оценена по достоинству. Мне также нравятся подсказки о том, как я мог бы сделать что-то подобное:Рекурсия C++ через дерево наследования с 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();
Нет «A ... B ... C ... RecursiveMethod'. Существует только один «рекурсивный метод», который разделяется между ними. И так как 'this' никогда не изменяется (т. Е.' Typeid (* this) 'всегда одно и то же), вы получаете бесконечный цикл. – freakish