我想使用BOOST_PP_REPEAT(计数,宏,数据),我的宏看起来像
`TEMPLATE(z,n,x,y)
BOOST_PP_REPEAT(5,模板,4,5)`
它抱怨BOOST_PP_REPEAT传递4个参数,而它只需要3.是否有办法将两个参数打包到BOOST_PP_REPEAT的“data”参数中。
谢谢!
答案 0 :(得分:2)
#define TEMPLATE (z, n, data) use_first(BOOST_PP_TUPLE_ELEM(2, 0, data)); use_second(BOOST_PP_TUPLE_ELEM(2, 1, data));
#define YOUR_MACRO(n, arg1, arg2) BOOST_PP_REPEAT(5, TEMPLATE, (arg1, arg2))
答案 1 :(得分:1)
使用嵌套括号使参数列表成为一个独特的参数:
BOOST_PP_REPEAT (5, TEMPLATE_2ARG, (4, 5))
然后从TEMPLATE_2ARG
内部剥去额外的parens。
#define STRIP_PARENS( ... ) __VA_ARGS__
#define TEMPLATE_2ARG( I, ARGS ) TEMPLATE( I, STRIP_PARENS ARGS )
#define TEMPLATE( I, X, Y ) whatever