次のイテレータ マクロが提供されます (変更できません)。
#define ITERATE(MACRO) \
MACRO(v1) \
MACRO(v2) \
MACRO(v3) \
MACRO(v4)
この背後にあるアイデアは、独自の 1 つの引数のマクロを定義し、それをイテレータに渡して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
ますが、それが既に使用している既存のコードを壊さない場合に限ります。