С 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;
}
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
с помощью замены макроса.