Tom*_*ter 10 c++ managed-c++ callback
我意识到这是一个新手问题,但是当我正在努力学习C++时,我经常对这个表达式"回调"感到困惑.我用Google搜索并检查了维基百科,但没有找到一个好的探索.我熟悉一些Java和C#,但听起来不太可能,我从来没有真正理解回调意味着什么.
如果有人知道如何向一个简单的外行解释这个术语,我会非常感激.
Mar*_*ett 16
我熟悉一些Java和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 */
}
}
Run Code Online (Sandbox Code Playgroud)
(如何执行排序的细节并不重要 - 只关注任何排序算法需要比较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;
}
Run Code Online (Sandbox Code Playgroud)
并重用与它们相同的排序功能:
int intValues[10];
Person personValues[10];
Sort(intValues, 10, sizeof(intVaues[0]), CompareInts);
Sort(personValues, 10, sizeof(personVaues[0]), ComparePersons);
Run Code Online (Sandbox Code Playgroud)
如果您使用成员函数,事情会变得更复杂,因为您必须管理this指针 - 但概念是相同的.与大多数事情一样,首先在C中解释它们更容易.;)
当你发送回调函数时,你会发送一种寻址函数的方法(例如,C++中的函数指针),这样你发送它的代码可以在以后完成某个进程时调用该函数.
和...之间的不同
start_some_process(some_value, some_function()) # not using a callback
Run Code Online (Sandbox Code Playgroud)
和
start_some_process(some_value, some_function) # using a callback
Run Code Online (Sandbox Code Playgroud)
在第一个实例中,您正在发送函数的结果,而在第二个实例中,您正在发送函数本身.