C ++ ForEach宏执行可变参数操作

时间:2017-04-19 14:35:57

标签: c++ macros

我正在尝试学习宏如何工作(使用MS Visual Studio),我不理解这种行为。我已经定义了这个宏:

#define _fe_0(_call, ...)
#define _fe_1(_call, x) _call(x)
#define _fe_2(_call, x, ...) _call(x) _fe_1(_call, __VA_ARGS__)
#define _fe_3(_call, x, ...) _call(x) _fe_2(_call, __VA_ARGS__)
#define _fe_4(_call, x, ...) _call(x) _fe_3(_call, __VA_ARGS__)

#define _GET_NTH_ARG(_1, _2, _3, _4, _5, N, ...) N

#define CALL_MACRO_X_FOR_EACH(x, ...) \
    _GET_NTH_ARG("ignored", ##__VA_ARGS__, \
    _fe_4, _fe_3, _fe_2, _fe_1, _fe_0)(x, ##__VA_ARGS__)

然后我定义了这些行动:

#define MY_DECL_1(X) int X;
#define MY_DECL_2(X, Y) X Y;

我不明白为什么第二次操作不起作用,有人可以帮助我吗?

CALL_MACRO_X_FOR_EACH(MY_DECL_1, myVar1, myVar2) // OK
CALL_MACRO_X_FOR_EACH(MY_DECL_2, (int, myVar3), ( int, myVar4) ) // ERROR

0 个答案:

没有答案