如果定义类似于 MACRO(name, seq) 并且代码如下:
,如何访问宏中的每个元素MACRO("TheName",
(Elem1)
(Elem2)
(Elem3)
)
我想生成下一个代码:
MACRO("TheName",
ELEMMACRO(Elem1)
ELEMMACRO(Elem2)
ELEMMACRO(Elem3)
)
或者类似的东西。换句话说,我想单独处理每个参数(我不关心定义,即使它是这样的
MACRO("TheName",
Elem1,
Elem2,
Elem3
)
元素可以多一些,也可以少一些。我已经尝试过 __V_ARGS__
(我只需要 gcc),但我只能复制所有元素,而不能单独处理它们。
我能做什么?
附注由于某些原因,我无法使用Boost。
最佳答案
最简单的方法是像这样使用序列迭代(不需要 boost):
#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)
关于c++ - 将宏参数中的序列转换为单独的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19680962/