¿Se considera en general una mala práctica de utilizar typeid
en el código de producción? Además, noté que typeid
devuelve type_info
, que incluye algunos metadatos (como una cadena con el nombre del tipo); ¿Hay alguna forma de desactivar esto?C++: Usando typeid en el código de producción
Respuesta
Es difícil decir si el uso de una función de idioma en particular es "mala" o "buena". Realmente depende de cómo lo uses. No hay nada inherentemente malo en usar typeid
si es la herramienta adecuada para el trabajo, pero si hay una mejor solución a cualquier problema que se está resolviendo, entonces usted debe evitar el uso de typeid
a favor de que una mejor solución.
A menudo no es una buena idea usar typeid
porque a menudo se puede evitar su uso mediante el uso de funciones virtuales y de herencia. Si puede actualizar su sistema de esta manera, entonces podría ser una buena idea hacerlo.
En cuanto a si puede tener typeid
evite devolver std::type_info
, esto no debería causar ningún problema de rendimiento. typeid
se evalúa como const std::type_info&
, por lo que no copia en profundidad ninguna de las cadenas de información que contiene. La mayoría de las implementaciones tienen el objeto real std::type_info
almacenado en la tabla de funciones virtuales del objeto, por lo que no se realiza ninguna copia interna.
- Depende de lo que esté haciendo con el typeid. Si estás usando el lugar donde deberías usar el polimorfismo, entonces eso es malo. Sin embargo, eliminar las huellas o cosas así para depurar en las máquinas de los clientes está bien.
- La única forma es deshabilitar RTTI en su compilador. No hay una forma estándar de hacerlo. Tenga en cuenta que esto también deshabilitará
dynamic_cast
.
- 1. C++ typeid operator
- 2. 'typeid' versus 'typeof' en C++
- 3. System.Diagnostics.Debug.WriteLine en el código de producción
- 4. typeid de tipos polimórficos
- 5. Secuencia en el código de producción
- 6. impulso :: ninguna optimización typeid para C++ 11
- 7. Implementación de LRU en el código de producción
- 8. Usando el código C de C++ usando autotools
- 9. typeinfo/typeid output
- 10. Flujo de trabajo en el código de producción
- 11. ¿Pruebas unitarias en el código de versión de producción?
- 12. Usando/mezclando C en código C++?
- 13. C# usando otros código
- 14. ¿NHibernate SchemaUpdate es seguro en el código de producción?
- 15. ¿Eliminar el registro del código de producción en Android?
- 16. Cómo separar el código de producción y prueba en Haskell
- 17. ¿Se puede usar Cronómetro en el código de producción?
- 18. analizando el código C usando python
- 19. Burlarse de métodos no virtuales en C++ sin editar el código de producción?
- 20. C++ dynamic_cast vs typeid para la comparación de clase
- 21. ¿Utiliza el modo C++ 0x de GCC en producción?
- 22. usando SQLite en Django en producción?
- 23. typeid() devuelve caracteres adicionales en g ++
- 24. ¿Qué es el "código de nivel de producción"?
- 25. Usando el grupo de métodos C# ejecuta el código
- 26. ¿Cómo administrar código de producción frecuentemente modificado?
- 27. código de prueba SQLite a código de producción proporción
- 28. ¿LINQ-to-NHibernate está listo para el código de producción?
- 29. ¿Cómo se mantiene el código de desarrollo y el código de producción?
- 30. Cómo refactorizar el código de prueba junto con el código de producción?
Probablemente no desee devolver las referencias 'typeid' de una llamada a la biblioteca. Será mejor que escriba una función para convertir un 'typeid' a otra cosa, como un' int', donde controla la asignación. Además, no hay garantía de que 'typeid' permanezca igual desde la versión del compilador hasta la versión. Esto también significa que no desea almacenar 'typeid' en el disco, excepto tal vez en un archivo de caché que no se conserva entre ejecuciones. –