在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
希望把函数当作参数引入一个新的函数中,可方便的分离底层上层的开发,或方便复杂系统集成。 一般首先定义一种指针函数,可以定义许多,最终这些函数会通过指针方式作为参数来回传递。 typedef struct{ //define the function pointer structure int (*func_name_a)(void *parammiter_a, int *parammiter_b); int (*func_name_b)(void *parammiter_c, int *parammiter_d); int (*func_name_c)(void *parammiter_e, int *parammiter_f); } func_sets_t; 定义了一个变量类 func_sets_t,是一个结构体,里面包括了一系列函数,都是函数指针。 接着需要实现一系列函数,一般不会少于func_sets_t可容纳的函数数量。 //implement a set of functions int func_name_a_inst(void *parammiter_a, int *parammiter_b){ // data_a return 0; } int func_name_b_inst(void *parammiter_c, int *parammiter_d){ // data_b return 0; } int func_name_c_inst(void *parammiter_e, int *parammiter_f){ // data_c return 0; } 这些函数的参数一般与func_sets_t定义的相一致。 之后编写需要传递函参数的function。 int general_func(int parammiter_g, func_sets_t *call_back){ // data_d switch (parammiter_g){ case 0: call_back->func_name_a(parammiter_a, parammiter_b); break; case 1: call_back->func_name_b(parammiter_c, parammiter_d); break; case 2: call_back->func_name_d(parammiter_e, parammiter_f); break; default: break; } return 0; } 此函数会根据不同的情况,选用合适的函数进行处理。 在main中一般还需要初始化一下指针函数。 int main_0(){ func_sets_t func_inst = { //init the fuction sets. .func_name_a = func_name_a_inst,// .func_name_b = func_name_b_inst, .func_name_c = func_name_c_inst }; general_func(parammiter_g, &func_inst);//invoke call back functions return 0; } 或者可以使用另外一种方式初始化。 void init_func_sets(func_sets_t *call_back){ call_back->func_name_a = func_name_a_inst; call_back->func_name_b = func_name_b_inst; call_back->func_name_d = func_name_c_inst; } int main_1(){ //init the fuction sets. func_sets_t *func_inst; func_inst = (func_sets_t *) malloc (sizeof(func_sets_t)); init_func_sets(func_inst); general_func(parammiter_g, func_inst);//invoke call back functions return 0; } 3/20/2020 siyi
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论