【问题标题】:any trick to unpack a variadic macro?解压可变参数宏的任何技巧?
【发布时间】:2014-05-22 20:45:57
【问题描述】:

解压可变参数宏有什么技巧吗?例如,

#define READ(...) 表示逐个读取参数

READ(a, b, c) 将被解压为read(a); read(b); read(c)

【问题讨论】:

  • 你为什么首先使用宏?为什么不用可变参数模板参数可以很容易地做到这一点?
  • 同意。这对于可变参数模板来说是微不足道的。如果宏是绝对必要的,比如BOOST_PP_SEQ_FOR_EACH
  • 这里的 read(a) 不是声明。它是定义函数或类的宏。

标签: c++ variadic-macros


【解决方案1】:

您可以使用此处所述的“配对滑动参数”宏技术来实现它: https://codecraft.co/2014/11/25/variadic-macros-tricks

#define _EXPAND(args) args
#define READ1(a) read(a);
#define READ2(a,b) read(a); read(b);
#define READ3(a,b,c) read(a); read(b); read(c);
#define GETREAD(_1,_2,_3, READN,...) READN
#define READ(...) _EXPAND(GETREAD(__VA_ARGS__, READ3, READ2, READ1)(__VA_ARGS__))

_EXPAND(args) 仅在 MSVC 中需要。

【讨论】:

    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多