Лекция 31. Динамическая информация о типе Красс Александр СПбГУ ИТМО, 2009
RTTI Определение RTTI Оператор typeid
Определение RTTI RTTI - Run-time Type Information (Динамическая идентификация типа данных) - механизм, реализованный в языках программирования, который позволяет определить тип данных переменной или объекта во время выполнения программы. В принципе RTTI позволяет выполнять совершенно потрясающие вещи: –Сериализация любых данных для записи в файл или передачи по сети К сожалению, в C++ RTTI имеет очень бедный функционал. Он позволяет только узнать имя типа своего аргумента. Для этого используется оператор typeid.
Оператор typeid Имеет следующий синтаксис: const type_info& typeid(expression) Класс type_info имеет следующий открытый интерфейс: class type_info { public: virtual ~type_info(); int operator==(const type_info& rhs) const; int operator!=(const type_info& rhs) const; int before(const type_info& rhs) const; const char* name() const; private:... }; Операторы == и != могут использовать для проверки того, что два выражения имеют (не имеют) один и тот же тип. Функция name возвращает имя типа. Формат возвращаемой строки зависит от реализации Функция before реализует аналог оператора <. Однако результат ее выполнения может быть разный в разных программах или даже при нескольких запусках одной и той же программы.
Аргументом typeid может быть или тип или выражение В случае применения typeid к полиморфному типу он производит проверку во время выполнения для выяснения того, на какой реально ссылается его аргумент. Для этого аргумент должен быть: 1. Ссылкой 2. Разыменованным указателем 3. Элементом массива (arr[i])
6 Спасибо за внимание Вопросы?