Класс 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 (Включить сведения о типе времени выполнения).