为什么使用Call Back而不是直接调用该函数?

时间:2017-08-02 18:55:51

标签: c++ callback function-pointers

在浏览这篇CallBack Function文章/代码时(在标题一个简单的回调函数下),我发现回调只是简单的函数调用,那么为什么不简单地调用该函数呢?通过作为参数传递的函数指针调用它?如果我理解错误,请告诉我。这个问题是基于初始阶段关于寻求简单澄清的概念的学习。

2 个答案:

答案 0 :(得分:2)

虽然问题用C ++标记,但我能想到的最简单的回调示例来自C.它是一个C风格的qsort函数。

想象一下你自己实现了一个数组排序功能。您希望该函数能够获取任何类型和任何大小的数组。那么,这样一个函数的论据是什么?首先,您需要知道数组的开始。其次,您需要知道数组的大小。第三,您需要知道数组中单个元素的大小。而且,对于元素,你的qsort需要知道一个是否比另一个更大!知道这个泛型函数的唯一方法是调用其他函数,但是哪一个?您必须接受指向此比较函数的指针作为参数,并在每次需要比较两个元素时调用它。这种比较函数是回调。

答案 1 :(得分:1)

有时你可能正在传递一个需要存储并稍后调用的函数(或函数对象/ lambda)。有时回调需要在调用之前通过多层函数传递。有时候它需要存储在一个容器中(比如std::map),之后只能通过不知道你放入容器的代码来调用它。

很多有很好的理由说明为什么callbacs不能只是一个预先声明的函数的简单静态调用。在编写代码时,您可能甚至不知道this指针(例如)。