dynamic_cast deve fazer o truque
TYPE& dynamic_cast<TYPE&> (object);
TYPE* dynamic_cast<TYPE*> (object);
A dynamic_cast
palavra-chave lança um dado de um ponteiro ou tipo de referência para outro, executando uma verificação de tempo de execução para garantir a validade da conversão.
Se você tentar converter o ponteiro para um tipo que não é um tipo de objeto real, o resultado da conversão será NULL. Se você tentar converter para fazer referência a um tipo que não é um tipo de objeto real, o elenco emitirá uma bad_cast
exceção.
Verifique se há pelo menos uma função virtual na classe Base para fazer o dynamic_cast funcionar.
Tópico da Wikipedia Informações sobre o tipo de tempo de execução
O RTTI está disponível apenas para classes polimórficas, o que significa que elas têm pelo menos um método virtual. Na prática, isso não é uma limitação porque as classes base devem ter um destruidor virtual para permitir que objetos de classes derivadas executem a limpeza adequada se forem excluídos de um ponteiro base.