頭條地址:https://www.ixigua.com/i677586170644791348...
B站地址:https://www.bilibili.com/video/av81202308/
github地址:https://github.com/anonymousGiga/learn_rus...
1、trait物件動態分發
(1)在上一節的trait物件例子中,對泛型型別使用trait bound編譯器進行的方式是單態化處理,單態化的程式碼進行的是靜態分發(就是說編譯器在編譯的時候就知道呼叫了什麼方法)。
(2)使用 trait 物件時,Rust 必須使用動態分發。編譯器無法知曉所有可能用於 trait 物件程式碼的型別,所以它也不知道應該呼叫哪個型別的哪個方法實現。為此,Rust 在執行時使用 trait 物件中的指標來知曉需要呼叫哪個方法。
2、trait物件要求物件安全
只有 物件安全(object safe)的 trait 才可以組成 trait 物件。trait的方法滿足以下兩條要求才是物件安全的:
- 返回值型別不為 Self
- 方法沒有任何泛型型別引數
例子://錯誤,因為Clone是非物件安全的,所以不能作為trait物件 //pub struct Screen { // pub components: Vec<Box<dyn Clone>>, //} fn main() { println!("Hello, world!"); }
本作品採用《CC 協議》,轉載必須註明作者和本文連結