async fn
返回实现的匿名类型Future
,因此,如果我们要将其用作回调,则需要将返回值转换为trait对象。
我试图编写一个函数来执行此操作,但是我遇到了一些终身问题。
async fn
将返回所有参数的生存期,因此回调的签名也需要。如何将生存期添加到回调的返回值?
use futures::future::{Future, FutureExt, LocalBoxFuture};
type Context = ();
type AsyncCb = Box<dyn for<'r> FnOnce(&'r Context) -> LocalBoxFuture<'r, ()>>;
fn normalize_async_cb<Fut: Future<Output = ()>>(f: for<'r> fn(&'r Context) -> Fut) -> AsyncCb
// how to add 'r for Fut? ^^^
{
let cb = move |ctx: &Context| f(ctx).boxed_local();
Box::new(cb)
}
另外,“回叫”是什么意思?您能否提供一个示例,说明在哪里需要这种类型的回调?
—
Coder-256
normalize_async_cb
函数指针?