La clase std::type_info
no se puede copiar. Esto hace que sea difícil almacenarlo en un objeto para su uso posterior. ¿Que debería hacer?¿Por qué std :: type_info no se puede copiar? ¿Puedo almacenarlo en algún lado?
Respuesta
Existe una solución mucho mejor en C++ 11. Un nuevo contenedor copiable llamado std :: type_index. Debe incluir el encabezado "typeindex" para usarlo.
Puede almacenar un puntero a un objeto constante std::type_info
.
No sabía que typeid (T) devolvió una referencia al objeto estático. Eso lo hace mucho más fácil. – StackedCrooked
¿Por qué std :: type_info no se puede copiar? (vea el título de la pregunta) – Attila
Cambié mi respuesta aceptada porque hoy 'std :: type_index' es el camino a seguir. Sin resentimientos :) – StackedCrooked
De MSDN y IBM online documentation:
La clase
type_info
describe el tipo de información generada dentro del programa por el compilador. Los objetos de esta clase almacenan efectivamente un puntero a un nombre para el tipo. La clasetype_info
también almacena un valor codificado de adecuado para comparar dos tipos de igualdad o el orden de clasificación . Las reglas de codificación y secuencia de clasificación para los tipos no están especificadas y pueden diferir entre programas.
- 1. ¿Por qué std :: type_info polymorphic?
- 2. ¿Por qué no se especifica type_info :: name()?
- 3. std :: is_convertible para type_info
- 4. ¿Por qué copiar elision no funciona con std :: move?
- 5. ¿Por qué puedo copiar unique_ptr?
- 6. ¿Para qué sirve `type_info :: before`?
- 7. ¿Cómo puedo encasillar con type_info?
- 8. Desenrollando el resultado de std :: type_info :: name
- 9. ¿Se puede copiar UIView?
- 10. No se puede iterar std :: map de Poco :: Any
- 11. ¿Por qué no puede gcc encontrar la interfaz aleatoria() cuando se establece -std = c99?
- 12. UIPasteboard - no se puede copiar el texto
- 13. C++: type_info para distinguir tipos
- 14. ¿Por qué no se puede clonar IEnumerator?
- 15. ¿Por qué std :: hash no se definió para std :: weak_ptr en C++ 0x?
- 16. ¿Por qué no se puede inicializar de forma simple (con llaves) 2D std :: array?
- 17. ¿C++ 11 proporciona funciones de hash para std :: type_info?
- 18. ¿por qué jspService() no se puede anular?
- 19. ¿Por qué datetime no se puede comparar?
- 20. ¿Por qué java.lang.Void no se puede serializar?
- 21. ¿Por qué no se puede publicar?
- 22. ¿Por qué no se puede encontrar getaddrinfo al compilar con gcc y std = c99
- 23. ¿Por qué no hay std :: stou?
- 24. No se puede incluir iostream en android por qué?
- 25. ¿Por qué se desactivó std :: strstream?
- 26. ¿Cómo puedo copiar un mapa en otro usando std :: copy?
- 27. ¿Por qué alguna vez scrollTop/scrollLeft no se puede escribir?
- 28. ¿Por qué no puedo ver esta excepción?
- 29. ¿Por qué no puedo indexar un std :: vector en la ventana inmediata?
- 30. ¿Por qué no puedo eliminar una cadena de un std :: set con std :: remove_if?
See Modern C++ Design. ¡Andrei Alexandrescu ha implementado algo similar y discutido en el libro! – Nawaz
'typeid (id)' no es temporal: es un objeto con una duración de almacenamiento estática. el objeto 'type_info' existe hasta que el programa termina. Es por eso que 'const &' aquí funciona. –
Su comprensión de la extensión de tiempo de vida temporal por referencia es incorrecta. (Coincidentemente, sin embargo, funciona por lo que dice @James). – GManNickG