Как получить доступ к каждому элементу в макросе, если определение похоже на 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.
Самый простой способ — использовать итерацию последовательности следующим образом (она не требует повышения):
#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)
Других решений пока нет …