如果定义类似于MACRO(name,seq)并且代码如下,如何访问宏中的每个元素:
MACRO("TheName",
(Elem1)
(Elem2)
(Elem3)
)
我想生成下一个代码:
MACRO("TheName",
ELEMMACRO(Elem1)
ELEMMACRO(Elem2)
ELEMMACRO(Elem3)
)
或类似的东西。换句话说,我想分别处理每个参数(我不关心定义,即使它会像
一样MACRO("TheName",
Elem1,
Elem2,
Elem3
)
可能会有更多元素,可能会更少。我已经尝试__V_ARGS__
(我只需要gcc),但我只能复制所有元素,而不是单独处理它们。
我该怎么办?
P.S。由于某些原因,我无法使用Boost。
答案 0 :(得分:3)
最简单的方法是使用这样的序列迭代(它不需要提升):
#define PRIMITIVE_SEQ_ITERATE(...) __VA_ARGS__ ## _END
#define SEQ_ITERATE(...) PRIMITIVE_SEQ_ITERATE(__VA_ARGS__)
#define MACRO_EACH(seq) SEQ_ITERATE(MACRO_EACH_1 seq)
#define MACRO_EACH_1(...) ELEMMACRO(__VA_ARGS__) MACRO_EACH_2
#define MACRO_EACH_2(...) ELEMMACRO(__VA_ARGS__) MACRO_EACH_1
#define MACRO_EACH_1_END
#define MACRO_EACH_2_END
对于序列中的每个元素,您将调用ELEMMACRO
:
MACRO_EACH
(
(Elem1)
(Elem2)
(Elem3)
)
并将扩展到这个:
ELEMMACRO(Elem1)
ELEMMACRO(Elem2)
ELEMMACRO(Elem3)