如何创建宏来生成此代码?

时间:2017-01-09 16:22:04

标签: c++ math postfix-notation

我写了一个支持许多功能的反向抛光符号评估器,因此我有一个switch,其中包含许多像这样的情况:

case 'b': {
    if (stack.size() < 1) fail();
    pop(l1, stack);
    l1 = log(l1);
    push(l1, stack);
    break;
}

对于需要一个参数的所有函数,模板是相同的,唯一的变化是case字符和l1 = ...;。如何创建生成此case的宏。

1 个答案:

答案 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)

但用宏来做这件事很难看。我的方式不同。