何时使用回拨功能?

jav*_*vex 7 c callback

你什么时候使用回调函数?我知道它们是如何工作的,我已经看到它们在使用中,我已经多次使用过它们.

来自C世界的一个例子是libcurl依赖回调来进行数据检索.

一个相反的例子是OpenSSL:在我使用它的地方,我使用了参数:

ret = somefunc(&target_value);
if(ret != 0)
    //error case
Run Code Online (Sandbox Code Playgroud)

我想知道什么时候使用哪个?回调只对异步内容有用吗?我目前正在设计我的应用程序的API,我想知道是使用回调还是只是一个out参数.在引擎盖下,它将使用libcurl和OpenSSL作为它构建的主库,参数"返回"是OpenSSL数据类型.

我没有看到回调对返回有什么好处.这只是有用的,如果我想以任何方式处理数据而不是仅仅回馈它?但后来我可以处理返回的数据.区别在哪里?

use*_*342 5

在最简单的情况下,这两种方法是等效的。但是,如果可以多次调用回调以处理到达的数据,则回调方法将提供更大的灵活性。

libcurl是一个很好的例子:它提供了一个API,该API允许为所有新到达的数据指定回调。如您所愿,替代方法是仅返回data。但是退货-如何?如果将数据追加到内存缓冲区中,则结果可能会很大,并且调用方可能只想将其保存到文件中。如果将数据保存到返回给调用者的文件中,则如果调用者实际上只想将其存储在内存中,则可能会导致不必要的I / O。如果调用方只想计算校验和,而根本不需要存储数据,则这两种方法都是错误的。

回调方法使调用者可以决定如何将基本数据块组装成更大的整体。