2014-03-05 42 views
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

有没有办法可以先评估0​​,然后连接到macro_

+0

神圣的莫尔!可变宏! D:我喜欢它的声音:) – Rubens

+0

只需使用'BOOST_PP_OVERLOAD'。你目前的问题可以通过使用'BOOST_PP_CAT'而不是'##'来解决,但是这个宏已经没有必要使用它了。 – chris

+0

@chris - 谢谢,但请将它写为答案,以便我可以标记它。 – TCS

回答

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)