我有以下一组宏:
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_
?
答案 0 :(得分: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)