Я пытаюсь создать функцию SendEvent
внутри макроса, где я определяю структуру события (я использую макрос, чтобы люди могли предоставлять переменное количество аргументов от 1 до 10 в зависимости от того, сколько данных они хочу использовать в своей структуре событий). В качестве примера я буду использовать макрос с тремя аргументами:
#define __MakeEvent3_(ID, t1_, t2_, t3_) \
struct S ## ID ## Event { \
RegisterEventRecords_(S ## ID ## Event); \
t1_; \
t2_; \
t3_; \
}; \
typedef S ## ID ## Event SEvent; \
inline void Send ## ID ## Event(t1_, t2_, t3_) { \
SEvent evt; \
evt.t1_ = t1_; \
evt.t2_ = t2_; \
evt.t3_ = t3_; \
level->SendEvent(evt); \
}
Макрос вызывается там, где каждый t1_
, t2_
и т. Д. c. Аргумент имеет как тип, так и имя, и в зависимости от количества предоставленных аргументов главный макрос разрешит использовать заданный __MakeEventN_()
:
MakeSystemEvent_(Player, int playernum, MessageType msgtype, char* msg) // invokes __MakeEvent3()_
Проблема в том, что я не знаю способ доступа к имени переменной (т. е. playernum
) с использованием только аргумента t1_
, поскольку он содержит значение int playernum
. Результатом этого является то, что, что неудивительно, я получаю несколько ошибок компилятора при назначении evt.t1_ = t1_
, поскольку это даже не жизнеспособное утверждение синтаксиса.
Есть ли какое-либо решение для анализа типа макро-аргумента, который имеет как тип, так и имя переменной, чтобы получить только имя переменной?