1 | ||||||
Как выполнить код на этапе компиляции?07.09.2020, 20:24. Показов 6220. Ответов 56
Метки нет (Все метки)
Предположим есть функция(может быть какая угодно часть кода).
0
|
07.09.2020, 20:24 | |
Ответы с готовыми решениями:
56
Как добавить анонимный тип в объект не на этапе компиляции, а на этапе выполнения программы? Надо для routes.MapRoute Возможно ли изменить байт-код класса потомка на этапе компиляции? Как на этапе компиляции определить принадлежность к классу? Как на этапе компиляции создать необходимое количество шаблонных функций? |
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
|
|
08.09.2020, 20:02 | 21 |
hoggy, да, забыл вызвать (студия на одном пк работает, пишу с другого). С остальным согласен, ошибался.
Avazart, DRY? Я уж было испугался, пару минут гуглил даже, что это за принцип DRI такой, который я умудрился нарушить) В общем, да, ничего вменяемого кроме всевозможных проверок, видимо, не сделать. На гитхабе такое встречается.
0
|
08.09.2020, 21:14 | 22 | |||||
Да опечатка. Почему сразу не создать массив масcивов, который объявить глобально, а не возвращая из ф-ции ?
Добавлено через 16 минут
0
|
09.09.2020, 20:38 [ТС] | 23 |
У меня есть задача я хочу в переменную
string (или напечатать в файл) сохранить код программы как текст и на этапе компиляции хочу чтобы были найдены нужные элементы, которые в дальнейшем будут использоваться для расчётов а данный текст будет автоматически уничтожен. Получается что я знаю всё заранее и могу вычислить такую процедуру на этапе компиляции. Ту функцию я взял как пример я думал есть обобщённая специфика управления этой процедурой но видимо тут всё тяжко. Другими словами сделать эффект интерпретатора на стадии компиляции ну а дальше использовать простые расчёты.
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
09.09.2020, 20:44 | 25 |
В compile-time рассчитывается результат, который вернёт функция.
void там делать бессмысленно, ничего внутри такой функции ты не сделаешь, кроме static_assert.
0
|
09.09.2020, 21:32 [ТС] | 27 | |||||
Pomidor если оно есть то е=1; Ну а дальше работать с е понятное дело что вы не понимаете зачем это нужно ведь это можно выполнить и так но я же не могу вам писать здесь длинные фразы что они будут делать. Просто у меня есть идея как это использовать и объяснять всю идею будет долго.
0
|
Комп_Оратор)
|
||||||
09.09.2020, 21:46 | 28 | |||||
0
|
09.09.2020, 21:46 | 29 |
Допустим у Вас есть файл А.cpp в проекте где это определена строка k
Вы пишите консольную утилиту которая будет парсить A.cpp искать cтроку k и генерировать на её основе файл B.сpp в который будет записывать bool e с соответствующим значением. Остается только настроить IDE/компилятор что бы перед компиляций запускалась Ваша утилита для кодогенерации а затем уже шла сама компиляция/сборка. Для того что утилите было проще искать можно искомые места обозначать пустыми(или не пустыми) макросами.
0
|
09.09.2020, 23:07 [ТС] | 30 |
Ну да такое бы мне тоже подошло. А как работает
typeid он же умеет просматривать собственный код?
это массив char можно просмотреть его и сравнить все символы если совпадут изменить значение е на истину, разве это нельзя сделать на этапе компиляции.
0
|
Комп_Оратор)
|
|
09.09.2020, 23:13 | 31 |
У массивов нет оператора сравнения, а библиотека cstring ещё далеко. Nexi99, а почему не задефайнить имечко какое-то? И проверять препроцессорными
#ifndef------#endif . Не обращайте внимания. Это я вангую. Нервишки дают фальстарт. Пока не скажете, что хотите сделать (не раскрывая глубинной сути, конечно) не смогу сказать, что-то не смешное.
0
|
09.09.2020, 23:23 | 32 | |||||
"Работает" внутри компилятора ...
Добавлено через 3 минуты Нельзя. Шаблоны "не умеют работать" со строками. Для таких целей обычно используют enum class Добавлено через 3 минуты
0
|
09.09.2020, 23:49 [ТС] | 33 |
Вы как читаете, я выше написал сравнить каждый символ а не массив, я знаю что в с++ нельзя так сравнивать тут вручную нужно это делать.
Я об этом не знал это очень плохо. Просто
typeid нихрена он не находит он видит только первый уровень а мне нужно глубже, получается что мне нужно составить текст программы, сравнить, а потом действовать, я думал можно выполнить эти расчёты на стадии компиляции т.к. текст программы известен.А какими способами можно прочитать ещё собственную инструкцию, насколько я это всё понял конечная инструкция будет храниться на ассемблере и её расшифровывать будет сложно но тем не менее всё равно инструкция куда-то пишется и мне конечно лучше её читать текстом?
0
|
Комп_Оратор)
|
|
10.09.2020, 00:02 | 34 |
Откуда будете брать исходный проверяемый массив, символы которого будете сравнивать? Допустим это из массива командной строки, - да? И будет неконстантное выражение.
Nexi99, тяжело ванговать всё время. Когда напишете что-то определяющее задачу, может попробую сказать что-то. Да тут и без меня найдется кому подсказать. Я пока - пас.
0
|
Комп_Оратор)
|
||||||
10.09.2020, 00:54 | 36 | |||||
О чём и речь
Добавлено через 9 минут В конце, для улыбнуть:
0
|
Комп_Оратор)
|
|
10.09.2020, 10:24 | 38 |
Если крупно напечатан, - можно.
Возможная реализация: 1. Завариваете кофе. 2. Cтавите на столик чашку и турочку. 3. Рядом кладёте фал со свежей газетой. 4. Запускаете make на компе. 5. Наслаждаетесь чтением. Добавлено через 32 минуты Nexi99, а если шутя - то ваш файл должен быть известен на этапе компиляции. Это значит, что вы можете зашить его в огромный (или не очень) массив байт. Можно также разместить в ресурсах исполняемого файла, но это будет непереносимо.
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
10.09.2020, 10:52 | 39 |
1
|
Комп_Оратор)
|
|||||||||||
10.09.2020, 11:07 | 40 | ||||||||||
Nexi99, конечно большие данные не стоит проверять даже так:
concharra использовать как управляющее. Тогда в исходник попадёт только нужный массив. Однако время загрузки и объём кода увеличатся. Вычисления времени компиляции сказываются на рантайме неизбежно.
0
|
10.09.2020, 11:07 | |
10.09.2020, 11:07 | |
Помогаю со студенческими работами здесь
40
Ключевое слово constexpr: как определить удалось ли вычислить возвращаемое значение на этапе компиляции? C++14: вычисления на этапе компиляции Ошибка на этапе компиляции Ошибка на этапе компиляции Чтение файла на этапе компиляции Загрузка изображений на этапе компиляции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |