LLVM tiene su propia alternativa enrollada a mano a RTTI que es una mejora de velocidad sobre RTTI incorporado y permite fundición dinámica a clases sin vtable (dyn_cast
). Sin embargo, todavía se puede usar de la misma manera que se usa dynamic_cast<>
aunque permite que se use con más clases.¿LLVM es una excepción a la regla para evitar conversiones dinámicas?
dyn_cast<>
template documentation
LLVM es un proyecto de buena reputación C++ por lo que esto parece ir en contra de lo común decir que demasiados moldes dinámica es un signo de un mal diseño, también conocido como un olor código. Sin duda, un elenco dinámico de mejor rendimiento no hace nada para mejorar su uso en el diseño que un estándar dynamic_cast
. Entonces, ¿quién está aquí? ¿Hay casos en los que el uso a gran escala de fundición dinámica sea una buena opción de diseño en el código C++? Google presenta 690 ocurrencias de este tipo de conversión dinámica en el código fuente de troncales LLVM.
Uses of dyn_cast<>
in LLVM trunk
Creo que simplemente muestra que "a veces, en un gran proyecto de software, tiene que doblar algunas de las reglas". O tal vez "los compiladores, o los marcos relacionados con el compilador, tienen que meterse con trucos de bajo nivel que generalmente son una mala idea". Eso no significa que podamos concluir algo sobre el uso de 'dynamic_cast' * en general * – jalf
Esto parece ignorar completamente 'las reglas'. Yo no llamaría 690 ocurrencias doblando las reglas.No veo nada especial acerca de compiladores o marcos relacionados con compiladores que signifiquen que se les permita romper creencias de diseño. La conversión dinámica aquí no tiene ningún efecto en el código de salida o en el código de entrada del compilador, simplemente es parte del diseño. Podría continuar con su argumento para decir que cualquier software suficientemente grande o complejo puede incumplir las reglas de diseño, lo que cuestiona seriamente este tipo de consejos de diseño para evitar 'dynamic_cast'. –