async fn
trả về một kiểu ẩn danh thực hiện Future
, vì vậy nếu chúng ta muốn sử dụng nó như một cuộc gọi lại, chúng ta cần chuyển đổi giá trị trả về thành một đối tượng đặc điểm.
Tôi đã cố gắng viết một chức năng để làm điều này, nhưng tôi đã có một số vấn đề suốt đời.
async fn
sẽ trả về thời gian tồn tại của tất cả các tham số, vì vậy chữ ký gọi lại cũng cần phải có. Làm cách nào tôi có thể thêm thời gian tồn tại vào giá trị trả về của cuộc gọi lại?
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)
}
Ngoài ra, ý của bạn là "gọi lại" là gì? Bạn có thể cung cấp một ví dụ cho thấy nơi bạn sẽ cần loại gọi lại này?
—
Coder-256
normalize_async_cb
một con trỏ hàm?