Trait core::marker::Unsize

source ·
pub trait Unsize<T: ?Sized> { }
🔬This is a nightly-only experimental API. (unsize #18598)
Expand description

可以把没有大小的类型改为动态大小的类型。

例如,按大小排列的数组类型 [i8; 2] 实现 Unsize<[i8]>Unsize<dyn fmt::Debug>

Unsize 的所有实现都是由编译器自动提供的。 这些实现是:

  • Arrays [T; N] implement Unsize<[T]>.
  • 实现 Trait trait 的类型也实现了 Unsize<dyn Trait>
  • 结构体 Foo<..., T, ...> 实现了 Unsize<Foo<..., U, ...>> 如果所有这些条件都满足:
    • T: Unsize<U>.
    • 只有 Foo 的最后一个字段具有包含 T 的类型。
    • Bar<T>: Unsize<Bar<U>>,其中 Bar<T> 代表最后一个字段的实际类型。

Unsizeops::CoerceUnsized 一起使用以允许 “user-defined” 容器 (例如 Rc) 包含动态大小的类型。 有关更多详细信息,请参见 DST coercion RFCthe nomicon entry on coercion

Implementors§