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

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

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

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

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

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

Как отсортирвоать контейнер, если его тип определяется по ходу выполнения программы? (динамическая идентификация типов) - C++
собсно #include <windows.h> #include <stdio.h> #include <vector> #include <list> #include <algorithm> #include <cxxabi.h> ...

Как устроена рекурсия? - C++
Давно хотел спросить каким боком она работает? К примеру void RecFunction(int level) { if (level == 0) return; ...

Стоит ли изучать как устроена ЭВМ для эффективного программирования - C++
Всем дробового времени суток (пятница!!!) Стоит ли изучать как устроен ЭВМ для эффективного программирования на плюсах ?

Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов. - C++
Буду благодарен! Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.

Динамическая матрица как член класса - C++
Доброго времени суток, не так давно отзывчивые люди научили меня тому, что я хочу старая тема Путём ручное выделения памяти под нужный...

Разработайте перегружены функции, в которые передаются два параметра типов int или float и три параметра типов - C++
Разработайте перегружены функции, в которые передаются два параметра типов int или float и три параметра типов int или float и возвращают...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
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
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
19.10.2013, 22:53 #3
Цитата Сообщение от voipp Посмотреть сообщение
Здрасте! Меня интересует, как компилируемая программа может проводить RTTI , если во время компиляции типы данных еще не известны.
Типы данных, необходимые компилятору, известны: это указатели куда-то в память, где должны лежать объекты таких-то типов. Ему неизвестны конкретные типы данных тех объектов, которые лежат в памяти.

Объекты, поддерживаемые RTTI, обязаны иметь таблицу виртуальных функций. Вот в эту таблицу помимо указателей на функции кладётся ещё указатель на некий дескриптор класса. Компилятор знает, где у объектов лежит эта таблица, и знает, где в таблице указатель на дескриптор. Так он может по известному указателю на неизвестный объект определить тот дескриптор.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2013, 22:53
Привет! Вот еще темы с ответами:

Идентификация объектов - C++
1 Идентификация объектов В приведенных ниже задачах необходимо составить программу идентификации геометрической фигуры по ее элементам....

Как проверить совместимость типов в VC++ ? - C++
Как проверить совместимость типов в VC++?

Как работает приведение типов - C++
#include <stdio.h> int main(void) { printf("%d", (int*)3 + 4); return 0; } То что выведется 19 проверить можно. Но...

Аутентификация и идентификация пользователей - C++
Цель работы: реализовать в «командном процессоре» защиту на уровне пользователя с применением метода паролей или его модификаций;...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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