BOOST_PP_REPEAT中的数据的多个参数

时间:2013-11-20 23:18:51

标签: c++ boost boost-preprocessor

我想使用BOOST_PP_REPEAT(计数,宏,数据),我的宏看起来像

`TEMPLATE(z,n,x,y)

BOOST_PP_REPEAT(5,模板,4,5)`

它抱怨BOOST_PP_REPEAT传递4个参数,而它只需要3.是否有办法将两个参数打包到BOOST_PP_REPEAT的“data”参数中。

谢谢!

2 个答案:

答案 0 :(得分:2)

使用BOOST_PP_TUPLE_ELEM

#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