1 个不稳定版本
0.1.0 | 2022 年 5 月 9 日 |
---|
#80 在 #nightly
每月 下载 25 次
8KB
独特类型
这是一个(目前)仅限 nightly 版本的 crate,它提供了一些用于生成和操作独特和匿名类型的工具。换句话说,这些是不能命名且保证始终与其他类型不同的类型。
此 crate 的主要功能是宏 new!
,可用于生成这些类型的类型。
可以使用 Unique
trait 在 trait 约束中要求类型由 new!
宏生成。
这些类型可以用来“标记”其他类型,使其具有唯一标识性。
当前实现
当前实现基于以下事实:从 Rust 参考)闭包表达式产生一个具有独特、匿名类型的闭包值,该类型无法写出
基本上,宏 new!
使用闭包的 TypeId
,并将其用作“模板”类型的 const 泛型,该类型实现了 Unique
trait。
安全性
此方法的主要问题是,为了在宏内部构造,模板类型及其依赖的所有其他类型都必须是公开可见的。
这意味着可以手动声明此类类型,这可能会破坏唯一性保证。
通过要求在安全性部分明确说明的要求来初始化模板类型,以使用 unsafe
代码解决此问题,使其被视为唯一的。
通过在需要更多关注的项目(理论上不应在 crate 之外可见)上使用 #[doc)]
添加额外的保护。