Повторите генерацию макроса
Я хотел бы создать следующие прагмы препроцессора
#pragma blabla column("0030")
#pragma blabla column("0130")
#pragma blabla column("0230")
...
#pragma blabla column("2330")
час меняется от 0 до 23
Это возможно с BOOST_PP_LOCAL_LIMITS
/ITERATE
?
1 ответ
Решение
Да уж.
#include <boost/preprocessor/repeat.hpp>
#include <boost/preprocessor/stringize.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/comparison/greater.hpp>
#define blabla(z, n, data) \
_Pragma(BOOST_PP_STRINGIZE( \
blabla column( \
BOOST_PP_STRINGIZE( \
BOOST_PP_CAT( \
BOOST_PP_CAT( \
BOOST_PP_IF( \
BOOST_PP_GREATER(n, 9), \
, \
0 \
), \
n \
), \
30 \
) \
) \
) \
))
BOOST_PP_REPEAT(24, blabla, ~)
_Pragma
спас нас там, потому что нет способа генерировать директивы препроцессора, такие как #pragma
Однако он очень требователен к тому, что принимает. В частности, он не выполняет конкатенацию строк, поэтому _Pragma("some" "thing")
не работает, мы должны объединить все в лексеме, а затем выполнить последовательность в качестве последнего шага.