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
関数ポインターへの入力はなぜですか?