本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。