我希望有一个宏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
除外)。
答案 0 :(得分:4)
你试过这个简单的答案吗?
#define Y(ignore, ...) __VA_ARGS__
#define X(...) Y(__VA_ARGS__)