type_info
- это просто стандартный класс библиотеки, который предоставляет информацию о типе. Объекты этого класса возвращаются оператором typeid
.
Наибольший интерес представляет не сам класс, а реализация RTTI (идентификация типа во время выполнения). Это чисто зависимая от компилятора функция, часть ABI (двоичный интерфейс приложения).
Вкратце, компилятор хранит информацию о типе для каждого типа polymorphi c вместе с vtable или VMT (таблица виртуальных методов). Эта информация относится к типу, а не к объекту и используется typeid
и dynamic_cast
. Класс type_info
- это просто интерфейс, предоставляемый конечному пользователю, он имеет внутреннюю реализацию в зависимости от компилятора.
Различные компиляторы реализуют разные ABI. Современные компиляторы g cc и clang реализуют Itanium C ++ ABI , который описывает все детали RTTI и все остальное. Microsoft Visual C ++ ABI не имеет документов.
Хорошая статья, описывающая V ++ таблицы C ++ и охватывающая RTTI: Shahar Mike - V ++ таблицы C ++ .