tipos - dynamic_cast c++ ejemplo




¿Cuándo es dynamic_cast<void*> útil? (2)

Cuando tienes algo como:

template<typename X, typename Y>
bool operator==(const X* px, const Y* py) {
     return dynamic_cast<void*>(px) == dynamic_cast<void*>(py);
}

Esta pregunta ya tiene una respuesta aquí:

5.2.7 / 7 dice algo en la línea de:

Si T es "puntero a cv void ", el resultado es un puntero a la clase más derivada apuntada por x .

¿Qué es una buena aplicación de este synatx? ¿Cuándo debería dynamic_cast<void*> ?


Una razón común es averiguar si dos interfaces IA* y IB* son de hecho punteros al mismo objeto subyacente. Si necesitas eso, usa el molde.

IIRC, incluso es posible en caso de herencia múltiple con una base no virtual repetida tener dos punteros IA* que comparan desiguales, pero apuntan al mismo objeto, ya que apuntan a dos subobjetos IA diferentes.





dynamic-cast