回调函数是实现多态的一种方法,通过函数指针传入不同的函数实现,达到相同接口,不同函数功能的效果。
回调函数主要包括三个部分:
> 函数指针声明;
> 回调函数调用接口实现;
> 回调函数的实现。
以排序为例:
函数指针类型声明:
typedef bool (*CallBack)(double param1, double param2); // 声明时确定函数返回值类型和参数类型
回调函数接口实现:
void MySort(double* arr, size_t arr_sz, CallBack compare) {
if (arr_sz < 2)
return;
for (int i = 0; i < arr_sz - 1; i++) {
for (int j = i + 1; j < arr_sz; j++) {
if (compare(arr[i], arr[j])) {
// 交换 元素i,j
double tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
回调函数实施例:
bool Less(double val1, double val2) {
return val1 < val2;
}
bool Greater(double val1, double val2) {
return val1 > val2;
}
回调函数调用示例:
int main()
{
double arr[10] = { 60.1, 30.0, 81.2, 90.3, 62.3, 82.5, 0.0, 17.8, 78.6, 60.0 };
// 降序
MySort(arr, 10, Less);
for (int i = 0; i < 10; i++) {
printf("%.1lft", arr[i]);
}
printf("n");
// 升序
MySort(arr, 10, Greater);
for (int i = 0; i < 10; i++) {
printf("%.1lft", arr[i]);
}
printf("n");
return 0;
}
输出:
90.3 82.5 81.2 78.6 62.3 60.1 60.0 30.0 17.8 0.0
0.0 17.8 30.0 60.0 60.1 62.3 78.6 81.2 82.5 90.3



