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

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

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

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,056
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
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
19.10.2013, 22:53     как устроена динамическая идентификация типов #3
Цитата Сообщение от voipp Посмотреть сообщение
Здрасте! Меня интересует, как компилируемая программа может проводить RTTI , если во время компиляции типы данных еще не известны.
Типы данных, необходимые компилятору, известны: это указатели куда-то в память, где должны лежать объекты таких-то типов. Ему неизвестны конкретные типы данных тех объектов, которые лежат в памяти.

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

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