gpt4 book ai didi

c - C 中的函数指针和枚举

转载 作者:行者123 更新时间:2023-12-01 07:46:34 25 4
gpt4 key购买 nike

我正在寻找一种奇特的方式来链接函数指针和枚举。

在我的例子中,我有一个消息队列,其中包含一个事件 ID 和一些与该事件相关的数据。一些简单的伪代码:

event=(eid, data)
switch(eid) {
case eid1:
handler1(data);
break;
case edi2:
handler2(data);
break;

}

现在我喜欢做一些优化。如果事件 ID 具有在 switch case 语句内部调用的函数的值,我可以通过保持代码的良好可读性来保存 switch case 解码。

event=(eid, data)
eid(data)

现在,如果我将其放入如下示例中:

static void abc(void * p) {

}

static void abc2(void * p) {

}

enum eventId {
eid1 = abc,
eid2 = abc2
} xyz;

我的编译器告诉:

error: enumerator value for 'eid1' is not an integer constant eid1 = abc

什么是绝对正确的。

有什么办法可以解决这个问题吗?

最佳答案

使用函数指针数组,以enum作为索引。

typedef void (*handler_func)(void *);
handler_func event_handlers[] = { abc, abc2 };
enum eventId {
eid1 = 0,
eid2 = 1,
eid_max
}

if (eid < eid_max) event_handlers[eid](data);

关于c - C 中的函数指针和枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59669810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com