如何将除第一个参数之外的所有参数扩展为可变参数宏?

时间:2014-08-10 23:31:48

标签: c++ macros boost-preprocessor

我希望有一个宏MAC(...)扩展到除了传递给它的第一个参数之外的所有宏。我如何实现这一目标?

我的第一个想法是将__VA_ARGS__转换为BOOST_PP_TUPLE,然后执行POP_FRONT操作:

#define MAC(...)\
  BOOST_PP_TUPLE_POP_FRONT(BOOST_PP_VARIADIC_TO_TUPLE(__VA_ARGS__))
MAC(1,2,3)

但这只是扩展到

  

BOOST_PP_TUPLE_POP_FRONT((1,2,3))

我尝试添加BOOST_PP_EXPAND宏:

#define MAC(...)\
  BOOST_PP_EXPAND(\
    BOOST_PP_TUPLE_POP_FRONT BOOST_PP_VARIADIC_TO_TUPLE(__VA_ARGS__))
MAC(1,2,3)

但我得到了同样的结果。我想要的

的输出
  

2,3

我如何实现这一目标?

使用模板不是一种选择,也不是使用其他库或工具(boost除外)。

1 个答案:

答案 0 :(得分:4)

你试过这个简单的答案吗?

#define Y(ignore, ...) __VA_ARGS__
#define X(...) Y(__VA_ARGS__)