Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
voipp
0 / 0 / 0
Регистрация: 30.04.2011
Сообщений: 68
#1

как устроена динамическая идентификация типов - C++

19.10.2013, 22:26. Просмотров 904. Ответов 2
Метки нет (Все метки)

Здрасте! Меня интересует, как компилируемая программа может проводить RTTI , если во время компиляции типы данных еще не известны.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2013, 22:26     как устроена динамическая идентификация типов
Посмотрите здесь:

C++ Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.
Неправильное приведение типов или как? C++
C++ Как отсортирвоать контейнер, если его тип определяется по ходу выполнения программы? (динамическая идентификация типов)
Идентификация объектов C++
Динамическая матрица как член класса C++
Стоит ли изучать как устроена ЭВМ для эффективного программирования C++
C++ Идентификация наследованных классов
Как устроена рекурсия? C++
C++ Как проверить совместимость типов в VC++ ?
Разработайте перегружены функции, в которые передаются два параметра типов int или float и три параметра типов C++
C++ Как работает приведение типов
C++ Аутентификация и идентификация пользователей

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,298
19.10.2013, 22:32     как устроена динамическая идентификация типов #2
ну например в MFC все классы созданы от CObject а там лежит информация о классе(CRUNTIMECLASS)
и есть специальный метод GetRuntimeClass который возвращает ссылку на эту информацию
вот как она устроена
Имеется одна структура CRUNTIMECLASS для каждого класса унаследованного от CObject. Элементы структуры следующие:
LPCSTR m_lpszClassName - Строка с нулевым символом в конце, содержащая имя класса ASCII.
Int m_nObjectSize - Размер объекта, в байтах. Если объект имеет элементы данных,которые указывают на распределенную память, размер той памяти не включен.
UINT m_wSchema - Номер схемы (- 1 для классов не умеющих преобразовываться в последовательную форму). См. макрокоманду IMPLEMENT_SERIAL для описания номера схемы.
CObject * (PASCAL* m_pfnCreateObject) () - Указатель функции к заданному по умолчанию конструктору, который создает объект вашего класса (допустимый только если класс поддерживает динамическое создание, иначе возвращает NULL).
CRUNTIMECLASS* (PASCAL* m_pfn_GetBaseClass) () - Если ваше приложение динамически связано с AFXDLL версией MFC, указатель на функцию, которая возвращает структуру CRUNTIMECLASS базового класса.
CRUNTIMECLASS* m_pBaseClass - Если ваше приложение статически связано с MFC, указатель на структуру CRUNTIMECLASS базового класса.
http://www.firststeps.ru/mfc/steps/help/r.php?638
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1240 / 989 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
19.10.2013, 22:53     как устроена динамическая идентификация типов #3
Цитата Сообщение от voipp Посмотреть сообщение
Здрасте! Меня интересует, как компилируемая программа может проводить RTTI , если во время компиляции типы данных еще не известны.
Типы данных, необходимые компилятору, известны: это указатели куда-то в память, где должны лежать объекты таких-то типов. Ему неизвестны конкретные типы данных тех объектов, которые лежат в памяти.

Объекты, поддерживаемые RTTI, обязаны иметь таблицу виртуальных функций. Вот в эту таблицу помимо указателей на функции кладётся ещё указатель на некий дескриптор класса. Компилятор знает, где у объектов лежит эта таблица, и знает, где в таблице указатель на дескриптор. Так он может по известному указателю на неизвестный объект определить тот дескриптор.
Yandex
Объявления
19.10.2013, 22:53     как устроена динамическая идентификация типов
Ответ Создать тему
Опции темы

Текущее время: 05:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru