Partilhar via


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.

Confira também

Informações de tipo em tempo de execução