Rust 中的 dyn Trait
語法會生成一種無大小 (Unsized !Sized
) 類型,以符合動態分派的機制,也就是讓物件以 trait 的形式描述,而非其實際類型。身為一種無大小類型,只有其指標才是有大小類型,而且會是一個胖指標 (fat pointer)。以下是 Rust 目前胖指標的定義。
/// Slice<'a, T> == &'a [T]
struct Slice<'a, T> {
ptr: *const T,
len: usize,
_marker: PhantomData<'a>,
}