![]() |
|
Модераторы: Daevaorn Страницы: (10) Все « Первая ... 3 4 [5] 6 7 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]()
|
|
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
xvr, поясните пожалуйста следующие моменты ;) а то в роде и понимаю, а вроде и нет..
Up. понял get_size() - это sizeof(type) get_align() - это выравнивание get_shift() - смещение Это сообщение отредактировал(а) boostcoder - 27.7.2011, 20:55 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
эм.. вопрос: метаинформацию генерить для всех типов в единице трансляции?
и еще один: при компиляции нужно собирать метаинформацию о типах. где ее сохранять? идея первая - в генерить статический_константный_массив. но проблема в том, что типов может быть тысячи ,что вызовет переполнение стека. идея вторая - генерировать только инициализатор для массива. а при старте программы выделять память в куче и инициализировать ее. для этого в AST находим функцию main() и в нее иньектим init() который это проделает. выскажитесь кто-нибудь ;) Это сообщение отредактировал(а) boostcoder - 27.7.2011, 14:50 |
|||
|
||||
| Sahab |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 1.9.2009 Репутация: нет Всего: 3 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
а помечалка не устанет? в смысле, это как-то не логично, писать reflection и заставлять юзера помечать классы... Это сообщение отредактировал(а) boostcoder - 27.7.2011, 17:14 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
на данный момент разобрался со сбором инфы из AST.
1. итерироваться от глобального неймспейса по всем вложенным с неограниченным уровнем вложенности. 2. перечислять все декларации в любом из неймспейсов. 3. определить/фильтровать типы деклараций. 4. перечислять члены и вложенные декларации структур/классов с неограниченным уровнем вложенности. 5. добавлять/изменять AST. вроде все что нужно... пока что не нашел функцию, которая из строкового представления декларации генерит AST. потому как создавать AST "руками" это жесть Это сообщение отредактировал(а) boostcoder - 28.7.2011, 08:33 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Это должно настраиваться (через опции командной строки). Либо все, либо специально помеченные (и унаследованные от них)
угу, стек не переполнится - статические массивы помещаются не в стеке. Посмотрите, как генерятся RTTI таблицы, и постройте там же Простые массивы с константами тоже сложно сгенерить? Все PODы и по одной штуке на каждую разновидность неPODов - функция, структура, массив, класс, и т.д. и т.п. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
кстати вариант. при том, это возможно.
ы. а где? это где смотреть? сложно - понятие относительное. я вообще-то предполагаю, что должна быть функция генерящая AST из ("int i = 0;"). но пока что я ее не нашел. это понятно. дело в том, что массив в gcc тоже под... попробую отыскать возможность получить больше информации о ноде... Добавлено через 45 секунд в моем понимании, не_POD - это все что содержит функции-члены. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
в области данных Добавлено через 8 минут и 17 секунд а почему этот не_POD один, а каких тогда POD`ов много ? раз уже подошли вплотную к AST, мож и POD'ам уделить внимание, чтоб не вводить в заблуждение хотя бы самого себя.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
это как? по правде сказать, всегда старался избегать использования статических переменных.. прошу прощения, запутался... по поводу POD`ов создам лучше отдельную тему. чтоб эту не хламить.. да-да-да. создаю тему. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
кстати, разобрался как итерироваться по узлам-предкам Это сообщение отредактировал(а) boostcoder - 28.7.2011, 01:31 |
|||
|
||||
| kosmonaFFFt |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Псевдокод:
Тут я вижу 2 варианта - либо вставить код инициализации объектов Class в начало main(), либо сразу сгенерировать во время компиляции и поместить в секцию данных программы, или куда там статические данные идут... Главное, чтобы global_classes из примера выше был доступен в рантайме... Можно для начала просто попробовать C++ код сгенерировать, примерно как в Qt с их QMetaObject... И да, если я что-то где-то не очень понятно объясняю, то это потому, что для меня основными языками являются Java и C#, и к наличию reflection я привыкший... -------------------- ![]() |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
6. итерироваться по списку аргументов со всеми вытекающими.
7. определить что поддерево является декларацией шаблона. 8. определить что поддерево является статической_переменной/статической_функцией/статическим_членом. Добавлено @ 08:09 kosmonaFFFt, понял. все же лучше использовать глобальный_статический_константный_объект. Это сообщение отредактировал(а) boostcoder - 28.7.2011, 08:33 |
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Ну да, тоже вариант... -------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |