我意识到这是一个新手的问题,但是我正在尝试学习C我经常对这种表达“回调”感到困惑.我已经google了,检查维基百科,但没有找到一个很好的解释.我熟悉一些
Java和C#,但是听起来不太可能,我从来没有真正了解一个回调的意思.
如果有人知道如何将这个术语解释给一个简单的外行人,那我真的很感激.
解决方法
I am familiar with some Java and C#
回调是这些语言中的一个事件或委托 – 一种在其上下文中由别人的代码运行代码的方式.因此,术语“回调”:
>你调用其他一些代码
它运行,也许计算一个中间值
>它回调你的代码,也许给你中间值
>它继续运行,最终通过完成将控制权交给你
典型的例子是一个用户定义的比较函数(回调)的排序例程.给定一个排序例程,如:
void Sort(void* values,int length,int valueSize,int (*compare)(const void*,const void*) { for (int i = 0; i < length; i = i + 2) { // call the callback to determine order int isHigher = compare(values[i],values[i + 1]); /* Sort */ } }
(进行排序的具体细节并不重要 – 只关注任何排序算法需要比较2个值并确定哪个更高)
那么现在我们可以定义一些比较函数:
int CompareInts(const void* o,const void* p) { int* a = (int*) o; int* b = (int*) p; if (a == b) return 0; return (a < b) ? -1 : 1; } int ComparePersons(const void* o,const void* p) { Person* a = (Person*) o; Person* b = (Person*) p; if (a == b) return 0; return (a->Value() < b=>Value()) ? -1 : 1; }
并重新使用与他们相同的排序功能:
int intValues[10]; Person personValues[10]; Sort(intValues,10,sizeof(intVaues[0]),CompareInts); Sort(personValues,sizeof(personVaues[0]),ComparePersons);
如果您使用成员函数,事情会变得更加复杂,因为您必须管理这个指针,但概念是一样的.与大多数事情一样,首先在C中更容易地解释它们.