一个C的例子
#include <stdlib.h> #include <stdio.h> #include <string.h> //普通的search函数 int search(int * arr, size_t size, int target) { for(int i=0;i<size;i++) { if(arr[i] == target) { return i; } } return -1; } //通用的search函数 int search_template(void* arr, size_t size, void* target, size_t element_size, int(*func_cmp)(void*,void*) ) { for(int i=0;i<size;i++) { if( func_cmp((unsigned char*)arr + element_size * i, target) == 0 ) { return i; } } return -1; } //回调函数,专门用于比较int类型 int int_cmp(int *x, int* y) { return *x - *y; } //typdef [内容] [别名],这里定义的别名就是 Book typedef struct Book_str { char* name; char* info; } Book; //回调函数 int(*cmp)(void*,void*) 就是要调用的函数 void xx(void* a1, void* a2, int(*cmp)(void*,void*)) { int x = cmp(a1,a2); printf("xx= %d\n",x); } int book_cmp(Book* b1, Book* b2) { int n= strcmp(b1->name, b2->name); if(n != 0) { return n; } return strcmp(b1->info,b2->info); } int main() { int arr[] = {5,6,1,4,6,11,34,101}; //int result = search(arr,8,34); int target = 34; int* p = ⌖ int result= search_template(arr,8,p, 4, int_cmp); //printf( "%d", sizeof(int)); printf("result=%d\n",result); Book *b1 = (Book *)malloc(sizeof(Book)); b1->name = (char *)malloc(sizeof(char) *10); b1->name="123"; b1->info = (char*)malloc(sizeof(char)*10); b1->info="123"; Book *b2 = (Book *)malloc(sizeof(Book)); b2->name = (char *)malloc(sizeof(char) *10); b2->name="abc"; b2->info = (char*)malloc(sizeof(char)*10); b2->info="abc"; xx(b1,b2,book_cmp); free(b1); free(b2); b1 = (void*)0; b2 = (void*)0; }