0

我有以下一组宏:

macro_1(p1)
macro_2(p1, p2)
macro_3(p1, p2, p3)
etc.

现在,我想创建另一个通用宏来评估以前的宏,我正在尝试这样做:

#define macro_x(...) macro_ ## BOOST_PP_VARIADIC_SIZE(__VA_ARGS__) (__VA_ARGS__)

其背后的想法是BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)评估正确的参数计数,然后将转向正确的宏。

但是,不幸的是,我刚刚发现BOOST_PP_VARIADIC_SIZE()将在连接到 之后进行评估macro_,从而导致不需要的代码macro_BOOST_PP_VARIADIC_SIZE

有没有办法我可以先评估BOOST_PP_VARIADIC_SIZE然后连接到macro_

4

1 回答 1

0

这已经为您完成了BOOST_PP_OVERLOAD

#define macro_x(...) BOOST_PP_OVERLOAD(macro_, __VA_ARGS__)(__VA_ARGS__)

你的不起作用的原因是因为连接需要延迟才能扩展宏。虽然很容易定义自己的,但BOOST_PP_CAT已经存在:

#define CAT_(a, b) a##b
#define CAT(a, b) CAT_(a, b)
于 2014-03-05T06:30:08.640 回答