async fn
повертає анонімний тип, який реалізується Future
, тому, якщо ми хочемо використовувати його як зворотний виклик, нам потрібно перетворити повернене значення в об’єкт ознаки.
Я намагався написати функцію для цього, але у мене були деякі проблеми з життям.
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
функції покажчика?