重复生成宏
Repeat generation of macro
我想生成以下预处理器编译指示
#pragma blabla column("0030")
#pragma blabla column("0130")
#pragma blabla column("0230")
...
#pragma blabla column("2330")
小时从 0 变为 23
BOOST_PP_LOCAL_LIMITS
/ITERATE
可以吗?
是的。
#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")
不起作用,我们必须连接 token-land 中的所有内容 然后 stringize 作为最后一步。
我想生成以下预处理器编译指示
#pragma blabla column("0030")
#pragma blabla column("0130")
#pragma blabla column("0230")
...
#pragma blabla column("2330")
小时从 0 变为 23
BOOST_PP_LOCAL_LIMITS
/ITERATE
可以吗?
是的。
#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")
不起作用,我们必须连接 token-land 中的所有内容 然后 stringize 作为最后一步。