【问题标题】:concatenate nested macro result连接嵌套宏结果
【发布时间】: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


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 2013-11-23
    • 2014-11-11
    • 2018-11-29
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多