4个版本 (2个稳定版)
| 1.1.0 | 2021年4月15日 |
|---|---|
| 1.0.0 | 2021年4月6日 |
| 1.0.0-beta | 2021年4月4日 |
527 在 嵌入式开发
每月下载 24,491次
用于 40 个包 (7个直接使用)
27KB
345 代码行
unsize
目标和目标
在嵌入式环境中,有很多自定义智能指针的使用场景,例如封装栈或自定义区域中对象的拥有权等。还希望避免不必要的单态化,因为在代码大小方面,通常希望使用动态特质对象作为间接引用而不是为大量类型参数实例化泛型。然而,这些不能直接分配(或通常甚至不能直接构造)。标准库中的 Box 通常提供一种类似强制转换的方式:您可以转换 Box<[T; N]> 到 Box<[T]> 对于所有数组大小或 Box<u32> 到 Box<dyn Any>。
然而,这并不适用于自定义智能指针。转换基于一个仅在夜间可用的特质,需要明确选择加入。这个crate提供了一个替代方案,它可以在no_std环境中工作,例如启用避免对全局分配器有任何依赖的自定义Box设计,或者基于引用计数的指针的竞技场等。对于这些用例,它旨在用稳定和安全的方法替换夜间非尺寸机制。
用法
作为库开发者,您可以为您的智能指针类型实现 CoerciblePtr 特性。这允许使用此指针类型的所有转换。要为您自己的 ?Sized 包装类型提供自定义的无大小转换,您可以提供一个安全的构造函数来创建 Coercion。
作为启用 unsize 的指针类型的用户,您应该导入 CoerceUnsize 扩展特性和 Coercion 标记类型。然后创建一个 Coercion 实例来 '转换' 智能指针的指针类型。该类型定义了多个安全构造函数和一个 unsafe 逃生舱。如果编译成功,该crate还定义了一个宏,提供对其他无大小类型的安全转换。
附加
本项目许可协议为 Zlib OR Apache-2.0 OR MIT。您也可以选择 Unlicense,在这种情况下,版权头部表明该部分已尽可能多地捐赠给了公有领域。