|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.07.2012, 21:38 | #11 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
А что касается динамик_каста: его нельзя использовать для не_полиморфных типов. Что замечательно вычисляется времени компиляции: Код:
Добавь в базу хоть один виртуальный метод, и тут же заработает RTTI Последний раз редактировалось _Bers; 23.07.2012 в 21:43. |
|
23.07.2012, 21:49 | #12 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Ну что же, соглашусь. Признаюсь, RTTI избегаю как огня и соответно не знаю тонкостей.
|
23.07.2012, 22:04 | #13 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Хотя я не вижу ничего плохого в статик_тайп_ид. Оно же уже не кушает время в рантайме. А фокус тут следующий: Предположим, есть полиморфная иерархия. У потомка создаётся уникальный айдишник (привязка к параметру шаблона, ну или тупо к какому нибудь енуму). В интерфейсе базы есть метод Код:
Код:
И реализует интерфейсный метод: Код:
Поэтому, возвращаемый уникальный ид вычисляется на этапе компиляции. Дальше уже вызывающая сторона может сравнивать получаемый ид - это то что нужно, или что-то другое. Получаем идентификацию для полиморфов, без издержек в рантайме. А вообще, есть целые паттерны, как изготовить быстрый RTTI для полиморфов, с "автоматическим уникальным ид", и тп. |
|
23.07.2012, 23:38 | #14 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
То, что вы делаете это то же RTTI, только с вашими структурами - в принципе никакой разницы.
RTTI вкллючает скрытый виртуальный метод, который возрващает структуру, в которой тоже нет виртуальных методов. Ключевое то, что в объекте нужно делать виртуальный метод, а не то, как сгенерить уникальное ID для каждого типа. Тут даже и template ненужен static type_info сойдет не хуже. Время в рантайме кушает не определение типа (там то же самое что и у вас) а динамический каст - это может оказаться довольно медленным, особено если есть множественное или виртуальное наследование. |
23.07.2012, 23:52 | #15 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
А если сделать typeid(ptr->GetTypeInfo() ) Где GetTypeInfo возвращает const type_info& не_полиморфного типа, а значит, вычисляемого времени компиляции, то никаких потерь в рантайме уже не будет. Не будет никаких динамических кастов. Смысл в том, что бы для полиморфа не использовать встроенное RTTI |
|
24.07.2012, 09:16 | #16 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Цитата:
Единственный смысл делать свое RTTI это ограничить функционал и соотвественно размер программы но смысла в этом нет. Чтоб сделать хоть чтото смысленное надо будет заставлять программиста не ошибаться, ведь в type_info надо будет ставить ссылку на родителя (и не дай бог родителей) а без динамического каста вообще все теряет смысл, кроме одного частного случая когда у всех классов один и только один родитель, чего за пределами академических задач редко увидиш. |
|
24.07.2012, 14:12 | #18 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
А не проще будет сделать несколько функций с одним именем и с разным типом аргументов для разных структур?
|
24.07.2012, 16:00 | #19 |
Форумчанин
Регистрация: 18.02.2012
Сообщений: 155
|
ТС уже говорил, что вариант с перегрузкой ему не подходит.
|
24.07.2012, 20:54 | #20 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
typeid(ptr->GetTypeInfo() ); Что именно ты пихаешь в качестве аргумента typeid? Если ты пихаешь туда полиморфный объект, то прими мои поздравления: динамик_каст и потери производительности - твои лучшие друзья. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Написание программ (древовидные структуры, структуры неспециального вида и т.д.) | Green Gin | Фриланс | 2 | 27.04.2012 15:26 |
Управляющие структуры. Программирование алгоритмов разветвляющейся структуры. | Лёнка | Компоненты Delphi | 1 | 23.04.2012 15:03 |
C# определение ф-и | Lucky777 | Помощь студентам | 4 | 10.06.2011 01:00 |
Определение по IP | ProgDel | Работа с сетью в Delphi | 3 | 08.11.2010 22:14 |
Линейные структуры - что это? (определение) | MR_Andrew | Помощь студентам | 6 | 07.10.2009 18:38 |