Как мне добавить макрос несколько раз?

С boost preprocessor В библиотеке я могу делать такие вещи:

#define ARRAY (3, (a, b, c))
BOOST_PP_ARRAY_PUSH_BACK(ARRAY, d) // this expands to a, b, c, d

Но как мне сделать это несколько раз? Скажи я хочу push_back более одного раза, в разных частях моего кода, а затем отобразить результат?

Следующий код просто распечатывает dummy:

#include <boost/preprocessor.hpp>

#include <vector>
#include <algorithm>

#define ARRAY (1, (dummy))

BOOST_PP_ARRAY_PUSH_BACK(ARRAY, 1)
BOOST_PP_ARRAY_PUSH_BACK(ARRAY, 1)
BOOST_PP_ARRAY_PUSH_BACK(ARRAY, 1)

int main()
{
std::cout << BOOST_PP_ARRAY_ENUM(ARRAY);
return 0;
}

0

Решение

BOOST_PP_ARRAY_PUSH_BACK на самом деле не изменяет ARRAY; это просто расширяется до ARRAY с добавленным новым элементом. Так, например, дано:

#define ARRAY (1, (dummy))

этот:

BOOST_PP_ARRAY_PUSH_BACK(ARRAY, 1)

расширяется до:

(2, (dummy, 1))

но ARRAY будет по-прежнему расширяться до:

(1, (dummy))

Вы не можете изменить список замены ARRAY с помощью замены макроса.

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector