Russian Qt Forum
Ноябрь 26, 2024, 19:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вычисления на стадии компиляции  (Прочитано 3136 раз)
sk9
Гость
« : Декабрь 16, 2013, 19:45 »

Добрый день. Интересуют вычисления на стадии компиляции. Например, хотелось бы инициализировать константную хэш-таблицу или забить большой bytearray на стадии компиляции. Как это можно сделать, при помощи шаблонов, или через них не получится? Ещё, насколько мне известно, глобальные целочисленные константы на самом деле не инициализируются на стадии выполнения, а лишь подставляются в код препроцессором. Это относится только целочисленным типам или ещё к каким-то? Как в итоге можно узнать, когда на самом деле инициализировалась константа?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Декабрь 16, 2013, 19:56 »

Например, хотелось бы инициализировать константную хэш-таблицу

инициализируй, в чём дело.

или забить большой bytearray на стадии компиляции

Я это делал с помощью objcopy, там есть специальные опции. На вход он принимает бинарные данные, на выходе даёт объектный файл с глобальным символом, который указывает на начало бинарных данных.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Декабрь 16, 2013, 20:06 »

Добрый день. Интересуют вычисления на стадии компиляции. Например, хотелось бы инициализировать константную хэш-таблицу или забить большой bytearray на стадии компиляции.
Обычно это загружают из ресурсов. Хоть и на этапе выполнения, но удобно, эффективно.

Как это можно сделать, при помощи шаблонов, или через них не получится?
Все эти шаблоны - извращения и бесполезный вынос мозга, держитесь от них подальше и используйте если уж совсем никак

Ещё, насколько мне известно, глобальные целочисленные константы на самом деле не инициализируются на стадии выполнения, а лишь подставляются в код препроцессором. Это относится только целочисленным типам или ещё к каким-то? Как в итоге можно узнать, когда на самом деле инициализировалась константа?
Препроцессор подставляет только для POD типов. Если же тип константы имеет конструктор - он сработает в run-time. Вообще не нужно особо стремиться именно к "прекомпиляции". Все "нелокальные" переменные инициализируются  до main, что вполне удобно.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Декабрь 16, 2013, 20:17 »

Все эти шаблоны - извращения и бесполезный вынос мозга, держитесь от них подальше и используйте если уж совсем никак.
Трагизма маловато. Улыбающийся
Где рассказ про мальчика, который пользовался шаблонами и у него лопнула голова?  Смеющийся
Записан
Bepec
Гость
« Ответ #4 : Декабрь 16, 2013, 21:06 »

Всё и сразу хочется. Ну эт понятно. Но увы это не имеет большого смысла. Большой объем данных инициализировать не имеет выгоды вот так вот. А маленький - смысл?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Декабрь 16, 2013, 21:11 »

Трагизма маловато. Улыбающийся
Где рассказ про мальчика, который пользовался шаблонами и у него лопнула голова?  Смеющийся
А чего рассказывать если здесь эти мальчики - можно и посмотреть  Улыбающийся

Так в том и дело, что она будет инициализироваться каждый раз при запуске программы и тратить на это время, а я хочу, чтобы она была, грубо говоря, уже в самой программе (экзешнике).
Используя Qt Вы тем самым уже согласились что приложение тратит много чего на старте (без всякого Вашего участия). Думается что по сравнению с этим Ваши затраты - кошкины слезы.

Судя по всему, лучше забить на это дело, пока по крайней мере.
Плохое или хорошее - но разумное, практичное решение
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Декабрь 16, 2013, 21:15 »

А чего рассказывать если здесь эти мальчики - можно и посмотреть  Улыбающийся
Мы смотрим, ждем от вас больше подробностей. Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.174 секунд. Запросов: 23.