3 个版本
| 0.1.2 | 2023 年 8 月 23 日 |
|---|---|
| 0.1.1 | 2023 年 7 月 21 日 |
| 0.1.0 | 2023 年 7 月 21 日 |
#24 in #statically-typed
每月 25 次下载
在 interned 中使用
14KB
226 行代码(不含注释)
Staticize
Staticize 包含一个 Staticize trait,它提供了一个方便的关联类型 Static,该类型解析为 'static 版本的 T,对于所有实现 Staticize 的 T。 Staticize 在所有原始类型上都得到了实现,包括引用、大小为 16 的元组、任何 T 的数组和切片,只要它们实现了 Staticize。还提供了包括但不限于 Option、Result 和原子类型在内的各种内置类型的实现。还包括 std 和 alloc 功能,它们提供了更多的实现。
用例
Staticize 对于需要 T 但由于某种原因需要它的 'static 版本的情况非常有用,例如,当您正在处理类型擦除的堆分配时,就像我的 interned crate 一样。另一个常见的用例是需要类型静态版本的一些泛型方法,例如 TypeId::of。
例如,一个接受类型为 T 的值的函数,将其存储在堆上的静态中,并返回堆上数据的静态版本的引用,可能使用以下签名
pub fn heap_allocate<T: Staticize>(val: T) -> T::Static {
// ...
}
功能
在 Staticize 上还提供了两个便利方法,static_type_id 和 static_type_name。这些方法使用 core::any 中的功能来返回 T 的静态版本的底层 TypeId 和名称(作为 &'static str)。
Staticize 完全 no_std,因此它可以在标准库不可用的奇特场景中使用,例如嵌入式设备或 WASM。
std
std 功能为 std 类型添加了额外的实现,例如 String,Vec 等。
alloc
alloc 功能为 alloc 类型添加了额外的实现,这些类型是 no_std 安全的,例如 String,Vec 等。