#define PP_ARG0_(arg0, ...) arg0
#define PP_REST_(arg0, ...) __VA_ARGS__
#define PP_ARG0(args) PP_ARG0_ args
#define PP_REST(args) PP_REST_ args
#define FUNCTION(name) void name();
#define FUNCTION_TABLE(...) \
FUNCTION(PP_ARG0((__VA_ARGS__))) \
FUNCTION_TABLE(PP_REST((__VA_ARGS__))) \
测试代码:
FUNCTION_TABLE(f1, f2,f3,testA,testB,testC);
显然,由于递归扩展,它只会声明void f1();
,其余部分不会被展开:
void f1(); FUNCTION_TABLE(f2,f3,testA,testB,testC);
我应该使用什么技巧来实现这种情况下的递归展开?问题是我需要支持许多参数(多达100个),而且绝对不能使用boost库。