Как я могу создать макрос для генерации этого кода?
Я написал оценщик обратной польской записи, который поддерживает много функций, поэтому у меня есть switch
во многих случаях, как этот:
case 'b': {
if (stack.size() < 1) fail();
pop(l1, stack);
l1 = log(l1);
push(l1, stack);
break;
}
Для всех функций, требующих одного аргумента, шаблон одинаков, единственное изменение case
характер и l1 = ...;
, Как я могу создать макрос, который генерирует это case
,
1 ответ
Не проверено, но это должно работать:
#define THEMACRO(charfunc, functionname) \
case charfunc: { \
if (stack.size() < 1) fail(); \
pop(l1, stack); \
l1 = functionname(l1); \
push(l1, stack); \
break; \
}
Теперь вы можете написать:
THEMACRO('b', log)
THEMACRO('c', someotherfunction)
вместо:
case 'b': {
if (stack.size() < 1) fail();
pop(l1, stack);
l1 = log(l1);
push(l1, stack);
break;
}
case 'c': {
if (stack.size() < 1) fail();
pop(l1, stack);
l1 = someotherfunction(l1);
push(l1, stack);
break;
}
Но это довольно некрасиво делать с макросами. Я бы сделал это по-другому.