Динамическая идентификация типа данных
Материал из Википедии — свободной энциклопедии
Эту статью следует викифицировать.
Пожалуйста, оформите её согласно правилам оформления статей.
|
Динамическая идентификация типа данных (англ. RTTI,Run-time Type Information или Run-time Type Identification) — механизм, реализованный в языках программирования, который позволяет определить тип данных переменной или объекта во время выполнения программы.
Содержание |
[править] Реализация
Существует множество реализаций такого механизма, но наиболее распространенные —
- ведение таблицы указателей на объекты
- хранение информации об объекте в памяти вместе с ним
Таким образом, операция определения типа сводится либо к поиску в таблице, либо к просмотру нескольких байт до адреса, на который указывает указатель на объект. У каждого способа есть свои преимущества и недостатки.
[править] C++
В C++ для RTTI применяются операторы dynamic_cast
и typeid
.
Оператор dynamic_cast
пытается выполнить приведение к указанному типу с проверкой. Целевой тип операции должен быть типом указателя, ссылки или void*
.
- Если целевой тип — тип указателя, то аргументом должен быть указатель на объект класса.
- Если целевой тип — ссылка, то аргумент должен также быть соответствующей ссылкой.
- Если целевым типом является
void*
, то аргумент также должен быть указателем, а результатом операции будет указатель, с помощью которого можно обратиться к любому элементу «самого производного» класса иерархии, который сам не может быть базовым ни для какого другого класса.
Оператор typeid
возвращает ссылку на структуру type_info
, которая содержит поля, позволяющие получить информацию о типе.
[править] Delphi
Компилятор Borland Delphi сохраняет в исполняемом файле программы информацию о всех классах, используемых в ней — в виде структур определенного формата. При создании любого объекта в памяти перед ним (по отрицательным смещениям) располагается заголовок, в котором есть в том числе ссылка на структуру-описатель класса это объекта.[источник?] Встроенные в язык функции работают с этой информацией прозрачно для программиста.
Заголовки объектов — также неявно — используются для автоматического управления памятью.
[править] C#
В C# для определения типа объекта во время исполнения используется операторы typeof
и as
, которые являются аналогами для typeid
и dynamic_cast
в C++ соответственно.
Это незавершённая статья о компьютерном программировании. Вы можете помочь проекту, исправив и дополнив её. |