Я пытаюсь преобразовать макрос с двумя параметрами в четырехпараметрический. От
определение LIST
, которое я не могу изменить, я бы хотел назвать ALL
,
предоставляя два дополнительных параметра.
#define LIST(x) \
x(p1, p2) \
x(p3, p4) \
x(...
#define ALL(A, B, C, D) .../... do stuff with A, B, C and D
Вот что я попробовал до сих пор:
#define RIGHT(C, D) C, D)
#define LEFT(A, B) (A, B, RIGHT
Но когда я тестирую его (gcc -E text.cpp
) с LIST( ALL LEFT (q1, q2) )
I
получить следующую ошибку:
ошибка: неопределенный список аргументов вызывает макрос "ALL"
При более внимательном рассмотрении, вот почему:
LIST
подставляется вместо первой строки
ALL LEFT (q1, q2)(p1, p2)
LEFT
заменяется на ALL (q1, q2, RIGHT(p1, p2)
- Препроцессор пытается развернуть
ALL
, но не находит закрытие
в скобках есть ошибка ...
Как я могу поступить иначе?
Спасибо.
EDIT:
Точнее, с заданным вводом:
#define LIST(x) \
x("p1", "p2") \
x("p3", "p4") \
x("p5", "p6")
#define ALL(A, B, C, D) {A, B, C, D}
Я хочу найти способ получить, в результате:
{"q1", "q2", "p1", "p2"}
{"q1", "q2", "p3", "p4"}
{"q1", "q2", "p5", "p6"}