Russian Qt Forum

Qt => Вопросы новичков => Тема начата: sk9 от Декабрь 16, 2013, 19:45



Название: Вычисления на стадии компиляции
Отправлено: sk9 от Декабрь 16, 2013, 19:45
Добрый день. Интересуют вычисления на стадии компиляции. Например, хотелось бы инициализировать константную хэш-таблицу или забить большой bytearray на стадии компиляции. Как это можно сделать, при помощи шаблонов, или через них не получится? Ещё, насколько мне известно, глобальные целочисленные константы на самом деле не инициализируются на стадии выполнения, а лишь подставляются в код препроцессором. Это относится только целочисленным типам или ещё к каким-то? Как в итоге можно узнать, когда на самом деле инициализировалась константа?


Название: Re: Вычисления на стадии компиляции
Отправлено: Alex Custov от Декабрь 16, 2013, 19:56
Например, хотелось бы инициализировать константную хэш-таблицу

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

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

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


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

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

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


Название: Re: Вычисления на стадии компиляции
Отправлено: Old от Декабрь 16, 2013, 20:17
Все эти шаблоны - извращения и бесполезный вынос мозга, держитесь от них подальше и используйте если уж совсем никак.
Трагизма маловато. :)
Где рассказ про мальчика, который пользовался шаблонами и у него лопнула голова?  ;D


Название: Re: Вычисления на стадии компиляции
Отправлено: Bepec от Декабрь 16, 2013, 21:06
Всё и сразу хочется. Ну эт понятно. Но увы это не имеет большого смысла. Большой объем данных инициализировать не имеет выгоды вот так вот. А маленький - смысл?


Название: Re: Вычисления на стадии компиляции
Отправлено: Igors от Декабрь 16, 2013, 21:11
Трагизма маловато. :)
Где рассказ про мальчика, который пользовался шаблонами и у него лопнула голова?  ;D
А чего рассказывать если здесь эти мальчики - можно и посмотреть  :)

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

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


Название: Re: Вычисления на стадии компиляции
Отправлено: Old от Декабрь 16, 2013, 21:15
А чего рассказывать если здесь эти мальчики - можно и посмотреть  :)
Мы смотрим, ждем от вас больше подробностей. :)