![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Я знаю их не так много (точнее совсем почти не знаю), но в Java например это сделано отдельным пакетом (java.lang.reflect). В VCL это сделано так же отдельным классом, описывающим тип. Возможно, что и тут имеет смысл сделать нечто, расширяющее RTTI. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
например что/как и что желательно получить в итоге? Добавлено через 3 минуты и 24 секунды xvr, говорю же: мне, конкретно для моей задачи необходимы два момента: 1. генерация сериализаторов/десериализаторов. 2. reflection с возможностью указать куда и как рефлектиться. т.е. - сериализатор, БД, другой объект этого же типа. но возможно в других ЯП есть более разумные и удобные моменты о которых я просто не знаю... |
|||
|
||||
| kosmonaFFFt |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Погляди в Java, там есть класс Class, описывающий классы, экземпляр которого можно получить например так:
а из него можно получить всю информацию, например методы, поля, суперклассы и т. д... -------------------- ![]() |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
|
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
осталось понять как это должно выглядеть в коде метод, или способ? тот же вопрос: как это должно выглядеть в коде? т.е. _этот_расширенный_RTTI_ - это должен быть некий тип/класс?
и снова тот же вопрос: как это должно выглядеть в коде? |
||||
|
|||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Например так:
К сожалению в С++ нету базового класса похожего на Object в Java, поэтому единственный на мой взгляд способ вернуть новый экземпляр класса, созданный через reflection - вернуть void*. -------------------- ![]() |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
тут Class это кто? какая-то встроенная сущность? а MyClass кто? и в общем, что выполняется в этой строке? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
итак. с чем разобрался:
1. для каждой единицы трансляции формируется Abstract syntax tree. 2. реальный компилятор(cc1plus) обрабатывает только по одному файлу за раз. при передаче g++ нескольких файлов, он поочередно выполняет cc1plus для каждого файла. а значит плагин будет запускаться столько же раз, сколько файлов. 3. есть возможность навесить свой обработчик на: 1) окончание разбора единицы трансляции, 2) глобальную обработку прагм, 3) глобальную обработку атрибутов. 4. плагин может добавлять/удалять в базу стандартных прагм и атрибутов свои прагмы и атрибуты. 5. есть возможность навесить обработчик на какую-то конкретную прагму или атрибут. т.е. сначала регаем имя, потом вешаем свой обработчик на реганное имя. 6. нет возможности навесить обработчик на разбор деклараций :( хотя в инете есть патч для этого. 7. нет возможности влиять на синтаксис языка. 8. AST можно генерить/изменять/удалять. т.е. при изменении AST можно с кодом сделать все что угодно. далее... Это сообщение отредактировал(а) boostcoder - 26.7.2011, 09:47 |
|||
|
||||
| EnergoHokum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
условно : Class - type_info MyClass - struct MyClass MyClass.class - typeid(MyClass) но применительно не для всех типов, а только для полиморфных.. что позволяет после создания объекта имея ссылку на класс динамически кастовать его к нужному интерфейсу.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
EnergoHokum, нет нужды
mes, а можете показать то же самое ,но в виде примера на с++? ;) т.е. каким вы видите использование, и какие дополнительные возможности должен предоставлять этот самый расширенный type_info? Добавлено через 1 минуту и да, type_info и typeid() никогда не использовал |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
это я к тому, что не очень представляю для чего они нужны, и как их использовать. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не понимаю...
Добавлено через 6 минут и 52 секунды mes, т.е. смысл в том, чтоб объект мог создать объект своего же типа? а как это можно использовать? еще не понял что Вы хотели продемонстрировать с помощью dynamic_cast? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |