Classe type_info

La classe type_info descrive le informazioni sul tipo generate all'interno del programma dal compilatore. Gli oggetti di questa classe consentono di archiviare un puntatore a un nome per il tipo. La classe type_info archivia anche un valore codificato adatto per confrontare due tipi per l'uguaglianza o l'ordine di confronto. Le regole di codifica e la sequenza di ordinamento per i tipi non sono specificate e possono variare in base al programma.

Il <typeinfo> file di intestazione deve essere incluso per usare la classe type_info . L'interfaccia per la 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;
};

Non è possibile creare direttamente un'istanza di oggetti della classe type_info , perché la classe ha solo un costruttore di copia privata. L'unico modo per costruire un oggetto (temporaneo) type_info consiste nell'usare l'operatore typeid . Poiché l'operatore di assegnazione è anche privato, non è possibile copiare o assegnare oggetti di classe type_info.

type_info::hash_codedefinisce una funzione hash adatta per il mapping dei valori di typeinfo a una distribuzione di valori di indice.

Gli operatori == e != possono essere usati per confrontare rispettivamente l'uguaglianza e la disuguaglianza con altri oggetti type_info .

Non esiste alcun collegamento tra l'ordinamento dei tipi e le relazioni di ereditarietà. Usare la type_info::before funzione membro per determinare la sequenza di confronto dei tipi. Non c'è garanzia che type_info::before produrrà lo stesso risultato in programmi diversi o persino esecuzioni diverse dello stesso programma. In questo modo, type_info::before è simile all'operatore address-of (&) .

La type_info::name funzione membro restituisce un oggetto const char* a una stringa con terminazione Null che rappresenta il nome leggibile del tipo. La memoria a cui si fa riferimento viene memorizzata nella cache e non deve essere mai direttamente deallocata.

La type_info::raw_name funzione membro è specifica di Microsoft. Restituisce un oggetto const char* a una stringa con terminazione Null che rappresenta il nome decorato del tipo di oggetto. Il nome viene archiviato nel formato decorato per risparmiare spazio. Di conseguenza, questa funzione è più veloce rispetto type_info::name a perché non è necessario annullare la dedecorate del nome. La stringa restituita dalla type_info::raw_name funzione è utile nelle operazioni di confronto, ma non è leggibile. Se è necessaria una stringa leggibile, usare type_info::name invece .

Le informazioni sul tipo vengono generate per le classi polimorfiche solo se viene specificata l'opzione del compilatore /GR (Abilita informazioni sul tipo di runtime).

Vedi anche

Informazioni sui tipi di runtime