创作人 Leo
编辑时间 Wed Jan 1,2020 at 10:13
linklist.h
/*从链表中删除数据
返回:int 删除成员数 */
int del_data_llink(LLink *llink, EleType e, int (*equals_callback_llink)(EleType , EleType )) ;
/*遍历链表 */
void foreach_llink(LLink *llink, void (*iterator_callback_llink)(EleType)) ;
test.c
/* 自定义数据类型 */
#define UDF_ELETYPE 1
typedef char* EleType ;
#include "linklist.h"
int equals_callback_llink(EleType e1, EleType e2);
void iterator_callback_llink(EleType e1);
int main(int argc, char* argv[])
{
LLink link;
init_llink(&link);
append_data_llink(&link, "hellosss");
append_data_llink(&link, "world");
del_data_llink(&link, "world", equals_callback_llink);
foreach_llink(&link, iterator_callback_llink);
return 0;
}
使用函数指针可以很灵活的实现泛型操作,比如一个泛型链表,就可以通过泛型+函数指针实现数据的遍历,回调操作等逻辑
一些开源库也是使用这种方法实现的用户回调操作,比如glib库