async fn
Gibt einen anonymen Typ zurück, der implementiert Future
wird. Wenn wir ihn also als Rückruf verwenden möchten, müssen wir den Rückgabewert in ein Merkmalobjekt konvertieren.
Ich habe versucht, eine Funktion zu schreiben, um dies zu tun, aber ich hatte einige lebenslange Probleme.
async fn
gibt die Lebensdauer aller Parameter zurück, daher muss auch die Signatur des Rückrufs. Wie kann ich die Lebensdauer zum Rückgabewert des Rückrufs hinzufügen?
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)
}
normalize_async_cb
einen Funktionszeiger?