回调函数在泛型算法中的应用---同步机制
来源:互联网 发布:瘦小腿 知乎 编辑:程序博客网 时间:2024/06/06 09:29
/* generics.h */#ifndef GENERICS_H#define GENERICS_Htypedef int (*cmp_t)(void *, void *);extern void *max(void *data[], int num, cmp_t cmp);#endif
/* generics.c */#include "generics.h"void *max(void *data[], int num, cmp_t cmp){ int i; void *temp = data[0]; for(i=1; i<num; i++) { if(cmp(temp, data[i])<0) temp = data[i]; } return temp;}
/* main.c */#include <stdio.h>#include "generics.h"typedef struct { const char *name; int score;} student_t;int cmp_student(void *a, void *b){ if(((student_t *)a)->score > ((student_t *)b)->score) return 1; else if(((student_t *)a)->score == ((student_t *)b)->score) return 0; else return -1;}int main(void){ student_t list[4] = {{"Tom", 68}, {"Jerry", 72}, {"Moby", 60}, {"Kirby", 89}}; student_t *plist[4] = {&list[0], &list[1], &list[2], &list[3]}; student_t *pmax = max((void **)plist, 4, cmp_student); printf("%s gets the highest score %d/n", pmax->name, pmax->score); return 0;}
max
函数之所以能对一组任意类型的对象进行操作,关键在于传给max
的是指向对象的指针所构成的数组,而不是对象本身所构成的数组,这样max
不必关心对象到底是什么类型,只需转给比较函数cmp
,然后根据比较结果做相应操作即可,cmp
是调用者提供的回调函数,调用者当然知道对象是什么类型以及如何比较。
阅读全文
0 0
- 回调函数在泛型算法中的应用---同步机制
- 回调函数在Android监听机制中的体现
- CORBA回调函数在C#项目环境中的应用
- 调用机制:回调函数、同步调用、异步调用
- 回调函数机制
- 回调函数在MFC中的使用
- 回调函数在android中的使用
- 回调函数应用
- java 调 dll 动态连接库以及java回调函数在dll中的应用
- 易生活(一)-APP---回调函数在异步操作中的应用
- JAVA同步回调函数
- Android回调函数机制
- C++ 回调函数 机制
- java回调函数机制
- java回调函数机制
- Java回调函数机制
- Java回调函数机制
- java回调函数机制
- 如何开启tomcat8的gzip压缩
- 生成二维码
- Android odex优化提高首次开机速度
- sql语句,三种删除drop、delete、truncate,区别
- HashMap排序
- 回调函数在泛型算法中的应用---同步机制
- Leetcode Construct Binary Tree from Preorder and Inorder Traversal
- 几个视图表
- spring学习之IOC和DI
- iOS-如何开发一款类 Runkeeper 的跑步应用 (上)
- Python '字段' 与 ['字段'] 的区别
- javascript里的继承实现过程
- ajax 跨域请求
- 重新认识Qt5