¿Cuándo es útil dynamic cast? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

5.2.7 / 7 dice algo así como:

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

¿Cuál es una buena aplicación de este ¿synatx? ¿Cuándo se debe usar dynamic_cast<void*>?

Author: 0x499602D2, 2014-09-01

2 answers

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

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, porque apuntan a dos subobjetos IA diferentes.

 26
Author: MSalters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-01 16:51:05

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);
}
 5
Author: Paul Evans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-01 20:02:07