#self-reference #reference #macro #memory-safety

any_ref

通过内存安全地捕获和移动非 'static 的东西

4 个版本

0.2.1 2022年6月19日
0.2.0 2022年6月19日
0.1.5 2022年6月18日
0.1.3 2022年4月12日

#self-reference 中排名第 5

Download history 5/week @ 2024-04-01 57/week @ 2024-07-08

每月下载量 57

MIT 许可证

15KB
154

Any-ref-rs

📖 文档

文档

❓ 什么是 any_ref

any_ref 是一个 crate,允许您以内存安全的方式捕获非 'static 的东西。

以下是一个简单的演示,以查看它是如何工作的。

// Create the type `ReturnVec` stands for `Vec<&'_ T>`
make_any_ref! {
    type ReturnVec<T: 'static> = for<'a> Vec<&'a T>;
}

let moved_ar;
{
    // This is the owner
    let num: Box<(u16, u16, u16, u16)> = Box::new((1, 2, 3, 4));

    // Initialize an `AnyRef`
    let ar: AnyRef<ReturnVec<u16>, _> = AnyRef::new(
        num, |x| vec![&x.0, &x.1, &x.2, &x.3]
    );

    // Move out of this scope
    moved_ar = ar;
}

// Read the reference of the value
assert_eq!(moved_ar.get(), &vec![&1, &2, &3, &4]);

📣 兼容性通知

在 rustc 1.61 版本以下,由于类型推断器的问题,我们无法使用 AnyRef::new 在稳定 Rust 中初始化 AnyRef,可以使用 new_any_ref 作为临时的替代解决方案。 如果可能,请升级您的 rustc 至 1.61.0 或更高版本!

🤔 故障排除

欢迎每个人找出错误或提出改进意见,如果有任何问题,请随时提交 issue。

此 crate 由维护(编写于 2022/6/19)。

⚖️ 许可证

MIT

❤️ 致谢

感谢在 Rust 论坛上帮助我找出几个问题和错误的人,感谢你们的努力!

依赖项

~1.5MB
~35K SLoC