Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> reflection in C++ 
:(
    Опции темы
sol78
Дата 6.4.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: 1
Всего: 0



Доброе вам время суток!
Мне нужно реализовать принцип Reflection, т.е. иметь возможность создавать обьект класс, который определяется Run time

Как это профессиональнее сделать?

Я понимаю что должна быть к-л функ. которая принимает парамет типа "Класс" и возращает птр на обьект типа Класс.
Класс который заинтересован в етом тулсе должен пройти резистрацию, но известно что для регистрации вызывать к-л функ.
ето должно как то делаться в нутри, но как?
PM MAIL   Вверх
korian
Дата 6.4.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 3
Всего: 17



PM   Вверх
JackYF
Дата 6.4.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(sol78 @  6.4.2008,  17:06 Найти цитируемый пост)
Как это профессиональнее сделать?

Если время и нервы присутствуют, можешь посмотреть, как это сделали в QT - класс QMetaType и всё, что с ним связано.
А также почитать "Design Patters", про фабрики и билдеры.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 7.4.2008, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



1. Тебе нужно получить способ получения метафинвы о типах. То что даёт стандартно typeid явно не хватит smile Самый простой способ - утила, генерящая по объявлению класса метаинфу в удобной для тебя форме. Удобней (why - см далее), чтоб она генерила сорс-файл, который будет включен в общую сборку (как - уже претензии к билд-системе).

2. Нужна абстракция для вызова методов. Всмысле передача параметров в каком-нибудь invoke в виде массива object специального класса. Плюс должны быть готовые его врапперы для встроенных типов. И шаблонные классы для своих врапперов (предыдущий пункт - на базе этого).

3. Возврат (результаты методов или сконструированный объект) - тоже в виде этого типа. Как достучаться до физического значения? Ничего лучше void* data() я не вижу smile

4. Тебе нужен маппинг "имя класса" -> "объект Type". Этот памминг - один из способов получение объекта класса Type.

5. Но не единственный smile Само собой ты должен иметь возможность получить тип по имеющиемуся объекту. И здесь два пути. Первый - иметь общего предка для типов, поддерживающих рефлекшн с виртуальным методом getType. Реализация этого метода будет генериться утилой из пункта 1. Второй метод - маппить стандартный type_info (указатель на него) и твою нормальную метаинфу. Этот маппинг будет добавляться в статик-инициализации чегот-о нагенеренного пунктом 1 smile


Вот так - навскидку smile


--------------------
PM MAIL ICQ Skype   Вверх
xvr
Дата 7.4.2008, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(sol78 @ 6.4.2008,  18:06)
Доброе вам время суток!
Мне нужно реализовать принцип Reflection, т.е. иметь возможность создавать обьект класс, который определяется Run time

Как это профессиональнее сделать?

Я понимаю что должна быть к-л функ. которая принимает парамет типа "Класс" и возращает птр на обьект типа Класс.
Класс который заинтересован в етом тулсе должен пройти резистрацию, но известно что для регистрации вызывать к-л функ.
ето должно как то делаться в нутри, но как?

Посмотри на Open C++

PM MAIL   Вверх
Vyacheslav
Дата 8.4.2008, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Вот простенький прототип решения подобной задачи
http://forum.vingrad.ru/index.php?showtopi...ost&p=60738


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Lazin
Дата 8.4.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(xvr @  7.4.2008,  12:30 Найти цитируемый пост)
Посмотри на Open C++

не обновлялся с 2004-го.. пациент скорее мертв чем жив =)
PM MAIL Skype GTalk   Вверх
xvr
Дата 8.4.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Lazin @ 8.4.2008,  10:39)
Цитата(xvr @  7.4.2008,  12:30 Найти цитируемый пост)
Посмотри на Open C++

не обновлялся с 2004-го.. пациент скорее мертв чем жив =)

Есть реинкарнация Viva Core Library
PM MAIL   Вверх
Любитель
Дата 8.4.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Ждём автора... Нужен более менее полноценный рефлекшн или только создание объектов (причём наследников какого-то определённого класса) по строковому имени?


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.