【发布时间】:2014-03-05 00:18:23
【问题描述】:
我有以下一组宏:
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_?
【问题讨论】:
-
天哪!可变宏! D:我喜欢它的声音:)
-
只需使用
BOOST_PP_OVERLOAD。您当前的问题可以通过使用BOOST_PP_CAT而不是##来解决,但是宏已经生成,因此仅使用它没有意义。 -
@chris - 谢谢,但请将其写为答案,以便我标记它。
标签: c++ macros variadic-macros boost-preprocessor