在C中注册许多函数回调处理程序的最佳模式?

时间:2016-03-09 06:16:10

标签: c design-patterns

我正在为AT命令解析器编写一个模块,在AT_Parser $emails = imap_search($inbox, 'ALL'); 中,我有一个我想做的回调列表。

创建struct实例时,我需要通过传递函数参数在我的AT_Parser方法中注册所有函数回调处理程序。

示例如下所示:

at_parser_create

你可以从上面的例子中看到,这个解决方案并不优雅和干净,如果我在// at_parser.h typedef void (*At_Handler)(uint8_t *src); typedef struct { At_Handler echo; At_Handler data; At_Handler device_profile; At_Handler parameter_setting; At_Handler error; } AT_Parser; AT_Parser *at_parser_create(At_Handler *echo, At_Handler *data, At_Handler *device_profile, At_Handler *parameter_setting, At_Handler *error); // at_parser.c AT_Parser *at_parser_create(At_Handler *echo, At_Handler *data, At_Handler *device_profile, At_Handler *parameter_setting, At_Handler *error) { AT_Parser *instance = malloc(sizeof(*instance)); instance->echo = echo; instance->data= data; instance->device_profile= device_profile; instance->parameter_setting= parameter_setting; instance->error= error; return instance; } // main.c static void at_handler_echo(uint8_t *src) {} static void at_handler_data(uint8_t *src) {} static void at_handler_device_profile(uint8_t *src) {} static void at_handler_parameter_setting(uint8_t *src) {} static void at_handler_error(uint8_t *src) {} int main(void) { AT_Parser *at_parser = at_parser_create(at_handler_echo, at_handler_data, at_handler_device_profile, at_handler_parameter_setting, at_handler_error); } 结构中有更多的函数回调,我需要在AT_Parser方法中有更多的参数。

有没有更好的设计模式或解决方案来解决这个问题?

0 个答案:

没有答案
相关问题