En su artículo de The Daily WTF del 12 de octubre de 2026, Remy Porter examina un ejemplo de C++ anonimizado por Alan. Porter atribuye el diseño a desarrolladores que no dominan con seguridad varios conceptos fundamentales de la orientación a objetos. También critica las analogías con taxonomías biológicas, porque pueden exagerar la importancia de la herencia.
#define IS_INSTANCE_OF(objectPointer, className) ((bool) (dynamic_cast<className *>(((Organism *) objectPointer)) != NULL))
#define IS_MEMBER_OF(objectPointer, className) IS_INSTANCE_OF(objectPointer, className)Animal::StealTentacle(Animal *animal) recibe un puntero sin procesar a Animal. Termina si this no representa un Octopus o un Squid. Después llama a animal->mLimbs->GetFirstTentacle(). Cuando obtiene un Limb, ejecuta limb->AttachToAnimal(this).
IS_INSTANCE_OF implementa la restricción. La macro convierte objectPointer en Organism* mediante un cast de estilo C y pasa el resultado a dynamic_cast<className*>, cuyo valor compara con NULL. En C++, un cast de estilo C permite que el compilador elija distintas formas de conversión según el contexto y puede llegar a reinterpret_cast, que ignora la información de tipos. IS_MEMBER_OF solo es un alias temporal.
El comentario de la macro afirma que dynamic_cast siempre produce un resultado válido para el tipo de puntero recibido y propone Organism como solución. Porter considera errónea esa interpretación. Una conversión imposible devuelve NULL. dynamic_cast también puede hacer un crosscast entre ramas derivadas que comparten una base pública. Un cast a Dog* desde un puntero Cat* puede funcionar si el objeto más derivado contiene ambos subobjetos.
En el código real, IS_INSTANCE_OF(animal, Felid) va seguido de otro cast de estilo C a Felid*. Un comentario cercano admite que el autor solo espera que la conversión haga lo previsto. Porter califica el diseño de antipatrón de selección por tipo. El sistema de tipos y el polimorfismo deberían expresar la restricción. Un despacho dinámico bien empleado puede representar un dominio con claridad. El artículo cita The Design and Evolution of C++ de Bjarne Stroustrup, que advierte que RTTI permite esquivar los mecanismos del lenguaje y acabar con una mezcla poco convincente de sintaxis de C y comportamiento en tiempo de ejecución asociado a Smalltalk.




Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
¿No llega nada? Mira en la carpeta de spam — y marca el correo como «No es spam» para que la próxima vez llegue directo.