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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> правильная реализация reflection+introspection, в С/С++ путем написания плагина для GCC. 
:(
    Опции темы
mes
Дата 7.10.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



Цитата(boostcoder @  7.10.2011,  13:23 Найти цитируемый пост)
 но я предполагал что rtti_ex_ должен содержать в себе указатели на функции, которые плагин будет генерить для каждого типа. и при инициализации глобального массива rtti_ex_ привязывать каждый элемент к своим функциям. 

суть не в том, где и когда размещать таблицу функций, а в том, что каждый объект должен иметь указатель на свой тип, поэтому void* для передачи отменяется.. 



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 7.10.2011, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  7.10.2011,  14:42 Найти цитируемый пост)
а в том, что каждый объект должен иметь указатель на свой тип

ааа, ну да smile это позволит избавится от дополнительных двух карт.
т.е. каждый пользовательский тип нужно оборачивать во что-то типа object_t?

Это сообщение отредактировал(а) boostcoder - 7.10.2011, 14:53
PM WWW   Вверх
mes
Дата 7.10.2011, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



Цитата(boostcoder @  7.10.2011,  13:49 Найти цитируемый пост)
ааа, ну да  это позволит избавится от дополнительных двух карт. 

вобще то  указатель  нужен не для этого smile


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 7.10.2011, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  7.10.2011,  14:53 Найти цитируемый пост)
вобще то  указатель  нужен не для этого

или я "того", или сегодня не мой день smile 
не затруднит ли Вас объяснить на пальцах задумку? а то есть подозрение, что я все же чего-то недопонимаю...

Это сообщение отредактировал(а) boostcoder - 7.10.2011, 14:59
PM WWW   Вверх
mes
Дата 7.10.2011, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



Код

void f(void * o) {
   static_cast<A*>(o) ->do_some();
}

void f(object * o) 
{
   if (A  * a =  safe_cast<A*>(o))  a->do_some();
}

первый случай не безопасный, второй вполне smile 

safe_cast для чистого void* применить не получиться ..

Добавлено через 12 минут и 40 секунд
вот добавил созданиепо строковому имени : http://liveworkspace.org/code/d6ab67485b64...34102089de2a7bd


Это сообщение отредактировал(а) mes - 7.10.2011, 15:21


--------------------
PM MAIL WWW   Вверх
mes
Дата 7.10.2011, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



вот с примитивной проверкой :
http://liveworkspace.org/code/622e0b0a7670...42bd1bc00f1f8be


--------------------
PM MAIL WWW   Вверх
mes
Дата 7.10.2011, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



вот добавил примитивный инвокинг : http://liveworkspace.org/code/3821cf66d30d...a6d63c1cc5a270c
расширить для произвольного кол-ва аргументов проблем не составляет.. проблематично продумать правила конвертации и проверки совместимости типов.. 


Это сообщение отредактировал(а) mes - 7.10.2011, 16:15


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 7.10.2011, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



разбираюсь.
PM WWW   Вверх
mes
Дата 7.10.2011, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 144
Всего: 250



вот еще один примерчик для разбора, как раз посвящен проблеме конвертации типов.. 
если продумать правила можно будет это дело автоматизировать :
http://liveworkspace.org/code/e40598e4dfb1...6d347046968ad29



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0698 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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