我想生成以下预处理器编译指示
#pragma blabla column("0030")
#pragma blabla column("0130")
#pragma blabla column("0230")
...
#pragma blabla column("2330")
小时从0更改为23
BOOST_PP_LOCAL_LIMITS
/ ITERATE
可以吗?
答案 0 :(得分:3)
是的
#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")
不起作用,我们必须将令牌域然后中的所有内容连接起来,然后进行字符串化。