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
等。