![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Любитель |
|
||||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Внешний кодогенератор. Средства метапрограммирования в С++ достаточно скудные и прилепленны искусственно (если речь про шаблоны) или в устаревшо-неудобно-нефункциональном виде (препроцессор).
Дык это зависит от твоей билд-системы |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот с использованием кода от Sabrog, автозаполнение таблицы значениями расчитамными в компил-тайм
|
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Не, ну рассчитать в компайл-тайм не вопрос, и уж совсем не вопрос заполнить в ран-тайме. А вот как бы сгенерить 255 байт в секции данных с уже инициализированными значениями и получить ссылку на первый байт. Так чтобы остановившись в entry-point и глядя на секцию данных мы бы уже видели этот заполненный массив, чтобы на это ни тратилось ни одного лишнего такта процессора.
Появилась мысль использовать union с массивом и тупым набором переменных. Интересно реально ли. Это сообщение отредактировал(а) SABROG - 18.6.2008, 17:56 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
тут кстати тоже идет заполнение масива zbits в рантайме , а не используется указатель на данные размешенные в секции данных |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот так они будут располагаться в сегменте данных
на такую конструкцию заполнить можно либо кодогенератором, либо вручную |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Как сказал Lazin, все четко - во время компиляции. Я это специально проверял в отладчике прежде чем постить на форум. Может быть стоит убрать const, т.к. я без него проверял. Вспоминаю возможности макросов в fasme, ну или хотябы в masme и плакать хочется над системой макросов в C++. Зато страшно интересно. 2mes, тоже думал над этим. Хочу как-то заюзать конкатенацию строк, чтобы можно было при каждом вхождении в шаблон добавлять к строке что-то типа ", 8-NBits<n>::value", а потом итоговый дефайн вставить в массив. Но ничего не выходит. Это сообщение отредактировал(а) SABROG - 18.6.2008, 21:17 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
неа, увольте .. я ленив для столь однообразного набора
спасиб, буду знать.. я тоже пытался Это сообщение отредактировал(а) mes - 18.6.2008, 21:57 |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
до меня то-же не доперло как это сделать шаблонами...
|
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот сделал набросок кодогенератора на основе препроцессора
и пример с его использованием по авто заполнению массива
// kg.h :
P.S. подправлено чтоб в основном коде не использовальзовать #define Это сообщение отредактировал(а) mes - 19.6.2008, 09:18 |
||||
|
|||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
А до меня не совсем доперло --- зачем? Шаблоны в си++ для вычислений унылы чуть менее чем полностью. А если мы вспомним boosts.preprocessor, то станет совсем грустно. В D емнип compile-time вычисления были неплохо сделаны. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
офф
Mayk, предлагаешь всем пересесть на Д? (кажись, среди нас появились диверсанты Это сообщение отредактировал(а) Alek86 - 19.6.2008, 10:12 |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Я предлагаю использовать средства по прямому значению. Препроцессор в С++ слабый и от него больше проблем, чем помощи (обычно). Шаблоны - да, это средство метапрограммирования, но их основная цель - абстракция от типа. Вот ту кучу примеров с шаблонами, которые были написаны - разве их удобно читать?
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |