#static #traits #type #generic #statically-typed

no-std staticize

提供了一个 Staticize trait,该 trait 提供了对任何实现 Staticize 的 T 的 'static 版本的访问。

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 中使用

MIT 许可证

14KB
226 行代码(不含注释)

Staticize

Crates.io docs.rs MIT License

Staticize 包含一个 Staticize trait,它提供了一个方便的关联类型 Static,该类型解析为 'static 版本的 T,对于所有实现 StaticizeTStaticize 在所有原始类型上都得到了实现,包括引用、大小为 16 的元组、任何 T 的数组和切片,只要它们实现了 Staticize。还提供了包括但不限于 OptionResult 和原子类型在内的各种内置类型的实现。还包括 stdalloc 功能,它们提供了更多的实现。

用例

Staticize 对于需要 T 但由于某种原因需要它的 'static 版本的情况非常有用,例如,当您正在处理类型擦除的堆分配时,就像我的 interned crate 一样。另一个常见的用例是需要类型静态版本的一些泛型方法,例如 TypeId::of

例如,一个接受类型为 T 的值的函数,将其存储在堆上的静态中,并返回堆上数据的静态版本的引用,可能使用以下签名

pub fn heap_allocate<T: Staticize>(val: T) -> T::Static {
  // ...
}

功能

Staticize 上还提供了两个便利方法,static_type_idstatic_type_name。这些方法使用 core::any 中的功能来返回 T 的静态版本的底层 TypeId 和名称(作为 &'static str)。

Staticize 完全 no_std,因此它可以在标准库不可用的奇特场景中使用,例如嵌入式设备或 WASM。

std

std 功能为 std 类型添加了额外的实现,例如 StringVec 等。

alloc

alloc 功能为 alloc 类型添加了额外的实现,这些类型是 no_std 安全的,例如 StringVec 等。

无运行时依赖

功能