Класс type_info

Класс type_info описывает сведения о типе, созданные в программе компилятором. Объекты этого класса эффективно сохраняют указатель на имя для типа. Класс type_info также сохраняет закодированное значение, подходящее для сравнения двух типов для равенства или сортировки порядка. Правила кодирования и последовательность размещения типов не указаны и могут различаться в разных программах.

Файл <typeinfo> заголовка должен быть включен для использования класса type_info . Интерфейс для класса 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;
};

Невозможно создать экземпляры объектов класса type_info напрямую, так как класс имеет только закрытый конструктор копирования. Единственным способом создания (временного) объекта type_info является использование оператора typeid . Так как оператор назначения также является частным, нельзя копировать или назначать объекты класса type_info.

type_info::hash_codeопределяет хэш-функцию, подходящую для сопоставления значений типа typeinfo с распределением значений индекса.

Операторы == и != могут использоваться для сравнения равенства и неравенства с другими объектами type_info соответственно.

Нет связи между порядком размещения типов и отношениями наследования. Используйте функцию-член, type_info::before чтобы определить последовательность сортировки типов. Нет никаких гарантий, что type_info::before приведет к тому же результату в разных программах или даже разных запусках одной и той же программы. Таким образом, type_info::before он аналогичен оператору (&) адреса.

Функция-член type_info::name возвращает const char* строку, завершающую значение NULL, представляющую удобочитаемое пользователем имя типа. Указываемая память кэшируется. Ее никогда не следует освобождать напрямую.

Функция-член type_info::raw_name является конкретной корпорацией Майкрософт. const char* Возвращается в строку, завершающуюся значением NULL, представляющую украшенное имя типа объекта. Имя хранится в украшенной форме, чтобы сэкономить место. Следовательно, эта функция быстрее, чем type_info::name из-за того, что не требуется отменять имя. Строка, возвращаемая type_info::raw_name функцией, полезна в операциях сравнения, но не является доступной для чтения. Если вам нужна читаемая для человека строка, используйте type_info::name вместо этого.

Сведения о типе создаются для полиморфных классов, только если указан параметр компилятора /GR (Enable Run-Time Type Information).

См. также

Сведения о типах среды выполнения