Описание тега preprocessor-meta-program

Мета-программирование - это написание программ, которые генерируют программы. Этот тег используется, когда языковой препроцессор используется для написания дополнительных программ. Мета-программирование с использованием препроцессора, такого как препроцессор C, который используется в компиляторах C или C++.
2 ответа

Является ли препроцессор C++ метапрограммирования полным по Тьюрингу?

Я знаю, что метапрограммирование шаблона C++ завершено по Тьюрингу. То же самое относится и к метапрограммированию препроцессора?
0 ответов

Оценка нетипичного аргумента шаблона в условном макросе

Я хочу реализовать для каждой идиомы обход всех пикселей / вокселей 2d/3d матрицы. В зависимости от размера у нас есть 2 петли или 3 петли. Код выглядит так: //template class for point template<int Dim> struct Point{ int _data[Dim]; int & …
2 ответа

Как получить имя вызывающей функции C++ на этапе предварительной обработки

Я должен использовать макрос PERF_INSTRUMENT из библиотеки. PERF_INSTRUMENT ожидает, что пользователь предоставил строку в стиле c в качестве имени функции, чтобы напечатать местоположение этой точки инструмента. Но я не хочу писать имя функции кажд…
1 ответ

Развернуть шаблон Variadic в макросе Vardiadic (как извлечь имена аргументов из целевой функции)

Я борюсь со сложной, но все же простой проблемой. Допустим, у меня есть целевая функция следующим образом void target_fnc(int arg1, double arg2) { /* do something here */ } и что я хотел бы "извлечь" это имена переменных (то есть "arg1", "arg2"). По…
3 ответа

Общие тонкости программирования на C++

Проблема, которую я имею, иллюстрируется в следующем коде. #include <iostream> #define X 4 int main() { std::cout << "should be 4: " << X << std::endl; #define Y X + 4 std::cout << "should be 8: " << Y << st…
1 ответ

Как разобрать токены, разделенные пробелами в препроцессоре C++?

Я занимаюсь метапрограммированием препроцессора, и мне нужен способ конвертации f(a b) в g(a,b) в препроцессоре C++. поскольку a а также b два жетона в C++Кажется возможным найти способ разделить их. Тем не менее, после нескольких часов работы все е…
2 ответа

Я хотел бы язык предварительной обработки для метапрограммирования

Я ищу язык, похожий на PHP, но более краткий - я испытываю желание назвать его "движком шаблонов", но я почти уверен, что это неправильный термин. Какой правильный термин? Текстовый препроцессор? В любом случае я бы хотел, чтобы он был основан на.NE…
1 ответ

Файловая итерация с препроцессором

Верно ли, что для рекурсии файла boost требуется, чтобы файл, использующий рекурсию, находился в пути включения? Я не вижу этого нигде в документации, но я только что отладил проблему, которая, кажется, имеет место. Это делает использование этого в …
1 ответ

Проблемы с расширением макросов в MSVC

Интересно, почему этот макрос так сильно расширяется. #define CONCAT_IMPL(A, B) A##B #define CONCAT(A, B) CONCAT_IMPL(A, B) #define EAT(...) #define TEST(ARG) EXPANDED, ARG) EAT( #define GET_LAST(A, B) B int result = 0; result = GET_LAST(CONCAT(TEST…
0 ответов

Метапрограммирование препроцессора C: заменить макрос не в списке аргументов

Этот вопрос касается «метапрограммирования препроцессора C», то есть таких вещей, как это, это, это, это и т. Д. Я пишу нетривиальную метапрограмму препроцессора C, которая, в частности, должна рекурсивно "вызывать" макросы (используя стандартнуюDEF…