如何反转可变参数宏的参数?例如,我想要
#define REVERSE(...) ???
REVERSE(A,B,C) // expands to C,B,A
我的目标是将前后参数分开:
#define APPLY(FUN,...) FUN(__VA_ARGS__)
#define FRONT(FIRST,...) FIRST
#define REST(FIRST,...) __VA_ARGS__
#define MOST(...) APPLY(REVERSE,APPLY(REST,REVERSE(__VA_ARGS__)))
#define BACK(...) APPLY(FRONT,REVERSE_ARGUMENTS(__VA_ARGS__))
FRONT(A,B,C) // expands to A
REST(A,B,C) // expands to B,C
MOST(A,B,C) // expands to A,B
BACK(A,B,C) // expands to C
最佳答案
Boost Preprocessor Library可以反转宏参数。不幸的是,它只能达到实现定义的最大参数列表长度。据我所知,不可能编写一个反转任意长参数列表的宏。
#include <boost/preprocessor.hpp>
#define REVERSE(...) BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_REVERSE(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)))
#define APPLY(FUN,...) FUN(__VA_ARGS__)
#define FRONT(FIRST,...) FIRST
#define BACK(...) APPLY(FRONT,REVERSE(__VA_ARGS__))
#define REST(FIRST,...) __VA_ARGS__
#define MOST(...) APPLY(REVERSE,APPLY(REST,REVERSE(__VA_ARGS__)))
关于c - 将参数反转为可变参数宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14365837/