c++ - ejemplo - ¿Cuándo es dynamic_cast<void*> útil?
dynamic_cast c++ (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 acv void
", el resultado es un puntero a la clase más derivada apuntada porx
.
¿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.