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]
implementUnsize<[T]>
. - 实现
Trait
trait 的类型也实现了Unsize<dyn Trait>
。 - 结构体
Foo<..., T, ...>
实现了Unsize<Foo<..., U, ...>>
如果所有这些条件都满足:T: Unsize<U>
.- 只有
Foo
的最后一个字段具有包含T
的类型。 Bar<T>: Unsize<Bar<U>>
,其中Bar<T>
代表最后一个字段的实际类型。
Unsize
与 ops::CoerceUnsized
一起使用以允许 “user-defined” 容器 (例如 Rc
) 包含动态大小的类型。
有关更多详细信息,请参见 DST coercion RFC 和 the nomicon entry on coercion。