举一个C 语言 结构体封装回调函数 的例子,不要用typedef
时间: 2024-11-03 22:24:13 浏览: 21
在 C 语言中,结构体可以用于封装回调函数,使得函数指针成为结构体的一部分。下面是一个简单的例子,假设我们有一个事件处理系统,需要注册和调用用户自定义的函数来响应特定事件:
```c
#include <stdio.h>
// 定义一个事件类型枚举
typedef enum {
EVENT_TYPE_A,
EVENT_TYPE_B,
} EventType;
// 定义事件处理结构体
struct EventHandler {
void (*callback)(void *context); // 回调函数指针,context 为用户传递的数据
void *context; // 用户数据
EventType eventType; // 事件类型
};
// 用户自定义的回调函数示例
void customCallback(void *data) {
printf("Received event of type %d with context: %p\n", *(int *)data, data);
}
int main() {
// 创建事件处理器实例,并设置回调函数
struct EventHandler eventHandler;
eventHandler.callback = customCallback; // 指向 customCallback 函数
eventHandler.context = (void*)123; // 用户数据,这里使用整数作为简化示例
eventHandler.eventType = EVENT_TYPE_A;
// 调用事件处理器的回调
eventHandler.callback(eventHandler.context);
return 0;
}
```
在这个例子中,`EventHandler` 结构体包含了指向用户自定义回调函数的指针 `callback`、用户数据 `context` 和事件类型 `eventType`。当需要处理特定类型的事件时,可以直接通过结构体引用调用相应的回调。
阅读全文