我正在为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
方法中有更多的参数。
有没有更好的设计模式或解决方案来解决这个问题?