Поделиться через


Класс type_info

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

Необходимо включить файл заголовка <typeinfo>, чтобы можно было использовать класс type_info. Для класса type_info используется следующий интерфейс.

class type_info {
public:
    virtual ~type_info();
    size_t hash_code() const
    _CRTIMP_PURE bool operator==(const type_info& rhs) const;
    _CRTIMP_PURE bool operator!=(const type_info& rhs) const;
    _CRTIMP_PURE int before(const type_info& rhs) const;
    _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 (Включить сведения о типе времени выполнения).

См. также

Ссылки

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