C++ - 用于根据枚举类型调用函数的宏

标签 c++ c macros

我有一个 enum 和一个函数,它接受这个 enum 并使用 switch case 来调用正确的函数:

enum { FOO, BAR, ... }   // 10-15 operations

void do_action() {
  switch(enum) {
    case FOO: fn_FOO(); break;
    case BAR: fn_BAR(); break;   
    case default: fn_DEFAULT(); break;
  }
}

我一直在尝试寻找一种方法来使用宏来自动生成上述 case 语句(以避免样板),但我是 C++ 的新手,谷歌并没有太大帮助。

我知道通过使用函数指针数组来避免某些样板 case 语句的替代方法,但我真的很想知道如何使用宏来完成此操作。

最佳答案

使用宏和标记粘贴应该相当简单,例如

#define do_action(e) fn_##e()

do_action(FOO); // -> fn_FOO();
do_action(BAR); // -> fn_BAR();

然而,这确实是 1980 年代针对 2014 年 C++ 问题的 C 解决方案,您几乎肯定应该重新考虑。

关于C++ - 用于根据枚举类型调用函数的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26784685/

相关文章:

c++ - 如何向应用程序发送文本?

c++ - return *this 在 C++ 中安全吗?

C结构还是函数?

enums - 在宏中匹配类似元组的枚举变量,其中枚举类型和变量是元变量: how do I write the matching pattern?

c - 这个 foreach C 宏有多邪恶?

c++ - PGI 不支持 OpenMP 4.5 运行时函数

c++ - 错误:将 ‘const Flacon’作为 ‘this’参数传递会丢弃限定符[-fpermissive]

c++ - 如何在 GCC 中弃用 C 预处理器宏?

c - 不使用浮点寄存器的浮点常量(Linux内核模块)

c++ - 使用 ReadConsoleInput() 拖动控制台窗口