2011-03-16 14 views
14

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?

+0

See Modern C++ Design. ¡Andrei Alexandrescu ha implementado algo similar y discutido en el libro! – Nawaz

+0

'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. –

+0

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

Respuesta

11

Existe una solución mucho mejor en C++ 11. Un nuevo contenedor copiable llamado std :: type_index. Debe incluir el encabezado "typeindex" para usarlo.

6

Puede almacenar un puntero a un objeto constante std::type_info.

+4

No sabía que typeid (T) devolvió una referencia al objeto estático. Eso lo hace mucho más fácil. – StackedCrooked

+3

¿Por qué std :: type_info no se puede copiar? (vea el título de la pregunta) – Attila

+0

Cambié mi respuesta aceptada porque hoy 'std :: type_index' es el camino a seguir. Sin resentimientos :) – StackedCrooked

0

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 clase type_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.

+2

Su pregunta no es sobre qué es 'type_info'. – GManNickG

+0

@GManNickG tiene razón, pero algunas referencias fallan en la respuesta de @ AlexendreC. (Es decir, ¿por qué un puntero a 'type_info' seguirá siendo válido durante la vida de la aplicación?) – olibre

Cuestiones relacionadas