Я пытаюсь имитировать поведение шаблона в C ++ с помощью макросов.Например, если бы я хотел получить список int *, я бы сделал что-то вроде этого:
typedef int* IntPtr;
List_DEFINE(IntPtr)
Обратите внимание, что List_DEFINE (IntPtr) не имеет точки с запятой, потому что это макрос.Я написал свой список «класс» (на самом деле просто пара структур с указателями методов) и протестировал его перед тем, как сделать его макросом.Сейчас я пытаюсь «макротизировать» мой код, и у меня возникают проблемы.Я определил свой макрос следующим образом:
#define List_DEFINE(t) \
struct List_##t_Node { \
...
В вышеприведенном примере я думал, что ## t будет заменено тем, что было передано в t, но, похоже, это не так.Если я определяю два разных типа списков, я получаю следующую ошибку:
test.cpp:85: error: redefinition of ‘struct List_t_Node’
test.cpp:75: error: previous definition of ‘struct List_t_Node’
Так что в приведенном выше примере я хотел бы, чтобы генерировалась структура List_IntPtr_Node, но вместо этого генерировался List_t_Node.Почему?