我写了一个支持许多功能的反向抛光符号评估器,因此我有一个switch
,其中包含许多像这样的情况:
case 'b': {
if (stack.size() < 1) fail();
pop(l1, stack);
l1 = log(l1);
push(l1, stack);
break;
}
对于需要一个参数的所有函数,模板是相同的,唯一的变化是case
字符和l1 = ...;
。如何创建生成此case
的宏。
答案 0 :(得分:1)
未经测试,但这应该有效:
1- You forgot to set the variable in setState
2- You have a problem with your ItemTodo
现在你可以写:
#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)
但用宏来做这件事很难看。我的方式不同。