下面的迭代器宏给了我(不能改变)
#define ITERATE(MACRO) \
MACRO(v1) \
MACRO(v2) \
MACRO(v3) \
MACRO(v4)
这背后的想法是我现在可以定义自己的单参数宏并将其传递给迭代器以扩展 for v1
, v2
, v3
, v4
。例如:
#define MYSTUFF(X) doSth(X);
ITERATE(MYSTUFF)
将扩大到
doSth(v1); doSth(v2); doSth(v3); doSth(v4);
我当前的问题是我想ITERATE
在另一个宏中调用,该宏想将一个额外的参数传递MYSTUFF
给ITERATE
.
为了实现这一点,我希望我可以使用以下构造捕获额外的参数名称:
#define PARTIAL(T) FULL(UUU,T)
#define FULL(U,V) doSth(U,V)
#define START(UUU) ITERATE(PARTIAL)
START(bla)
我希望何时ITERATE(PARTIAL)
扩展到:
FULL(UUU,v1) FULL(UUU,v2) FULL(UUU,v3) FULL(UUU,v4)
我实际上将捕获 的UUU
参数,START
并将其替换为bla
. 不幸的是,情况并非如此(至少在 gcc 中)。
- 你知道这样的名字捕获是否可以不同的方式实现?
- 或者您可能有不同的想法如何解决将额外参数传递到的问题
MACRO
? - 我可能被允许更改
ITERATOR
定义本身,但前提是它不会破坏任何已经使用它的现有代码。