本文简要介绍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 String.try_reserve用法及代码示例
- Rust Saturating.reverse_bits用法及代码示例
- Rust SyncSender.send用法及代码示例
- Rust Seek.stream_len用法及代码示例
- Rust SplitNMut用法及代码示例
- Rust SocketAddrV6.ip用法及代码示例
- Rust Shl.shl用法及代码示例
- Rust SubAssign.sub_assign用法及代码示例
- Rust SyncOnceCell用法及代码示例
- Rust Split.as_str用法及代码示例
- Rust String.insert_str用法及代码示例
- Rust String.into_raw_parts用法及代码示例
- Rust SocketAddr.port用法及代码示例
- Rust SocketAncillary.add_fds用法及代码示例
- Rust SocketAddr.as_abstract_namespace用法及代码示例
- Rust SocketAddr.as_pathname用法及代码示例
- Rust Stdio.piped用法及代码示例
- Rust SocketAncillary.clear用法及代码示例
- Rust String.extend_from_within用法及代码示例
- Rust SyncLazy用法及代码示例
- Rust Shr.shr用法及代码示例
- Rust String.clear用法及代码示例
- Rust SubAssign用法及代码示例
- Rust Saturating.signum用法及代码示例
- Rust Stdin.split用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait std::marker::Sized。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。