Вам нужно сначала проверить, имеет ли класс правильный тип, а затем привести его, используя dynamic_cast
, как уже было предложено.Это решение элегантно, так как динамическое приведение само выполняет проверку типов - то есть оно вернет NULL, если вы попытаетесь выполнить неверное приведение.(Нет необходимости использовать typeid
)
В качестве примечания, на вашем месте, я бы попытался сделать все, что вы пытаетесь сделать, без множественного наследования, если это возможно. Множественное наследование может открыть целую банку с червями, и его лучше избегать, если нет другой альтернативы.