当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Sized用法及代码示例


本文简要介绍rust语言中 Trait std::marker::Sized 的用法。

用法

pub trait Sized { }

在编译时已知的具有恒定大小的类型。

所有类型参数都具有 Sized 的隐式界限。如果不合适,可以使用特殊语法?Sized 来删除此绑定。

struct Foo<T>(T);
struct Bar<T: ?Sized>(T);

// struct FooUse(Foo<[i32]>); // error: Sized is not implemented for [i32]
struct BarUse(Bar<[i32]>); // OK

一个例外是特征的隐式 Self 类型。特征没有隐式 Sized 绑定,因为这与 trait object 不兼容,根据定义,特征需要与所有可能的实现者一起工作,因此可以是任意大小。

尽管 Rust 可以让你将 Sized 绑定到一个 trait,但你以后不能使用它来形成一个 trait 对象:

trait Foo { }
trait Bar: Sized { }

struct Impl;
impl Foo for Impl { }
impl Bar for Impl { }

let x: &dyn Foo = &Impl;    // OK
// let y: &dyn Bar = &Impl; // error: the trait `Bar` cannot
                            // be made into an object

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait std::marker::Sized。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。