Classe type_info
A classe type_info descreve as informações de tipo geradas no programa pelo compilador. Os objetos dessa classe armazenam efetivamente um ponteiro para um nome do tipo. A classe type_info também armazena um valor codificado adequado à comparação de dois tipos para igualdade ou ordem de agrupamento. As regras e a sequência de agrupamento de codificação para tipos não são especificados e podem ser diferentes entre os programas.
O arquivo de cabeçalho <typeinfo>
deve ser incluído para usar a classe type_info. A interface da classe type_info é:
class type_info {
public:
type_info(const type_info& rhs) = delete; // cannot be copied
virtual ~type_info();
size_t hash_code() const;
_CRTIMP_PURE bool operator==(const type_info& rhs) const;
type_info& operator=(const type_info& rhs) = delete; // cannot be copied
_CRTIMP_PURE bool operator!=(const type_info& rhs) const;
_CRTIMP_PURE int before(const type_info& rhs) const;
size_t hash_code() const noexcept;
_CRTIMP_PURE const char* name() const;
_CRTIMP_PURE const char* raw_name() const;
};
Não é possível instanciar objetos da classe type_info diretamente, pois a classe tem apenas um construtor de cópia privado. A única maneira de criar um objeto type_info (temporário) é usar o operador typeid. Como o operador de atribuição também é privado, não é possível copiar ou atribuir objetos da classe type_info.
type_info::hash_code
define uma função de hash adequada para mapear valores de tipo typeinfo para uma distribuição de valores de índice.
Os operadores ==
e !=
podem ser usados em comparações para fins de igualdade e desigualdade com outros objetos type_info, respectivamente.
Não há nenhum link entre a ordem de agrupamento de tipos e relações de herança. Use a função membro type_info::before
para determinar a sequência de agrupamento de tipos. Não há nenhuma garantia de que type_info::before
produzirá o mesmo resultado em programas diferentes ou mesmo em execuções diferentes do mesmo programa. Assim, type_info::before
é semelhante ao operador address-of (&)
.
A função membro type_info::name
retorna um const char*
para uma cadeia de caracteres com terminação nula que representa o nome legível por humanos do tipo. A memória apontada é armazenada em cache e nunca deve ser desalocada diretamente.
A type_info::raw_name
função de membro é específica da Microsoft. Ele retorna um const char*
para uma cadeia de caracteres terminada em nulo que representa o nome decorado do tipo de objeto. O nome é armazenado em sua forma decorada para economizar espaço. Consequentemente, essa função é mais rápida que type_info::name
porque não precisa do nome não decorado. A cadeia de caracteres retornada pela função type_info::raw_name
é útil nas operações de comparação, mas não é legível. Se você precisar de uma string legível por humanos, use-o type_info::name
.
As informações de tipo serão geradas para classes polimórficas apenas se a opção do compilador /GR (Habilitar informações de tipo em tempo de execução) for especificada.