Rust 程式設計視訊教程(進階)——021_2trait 物件

linghuyichong發表於2020-02-11

頭條地址: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 協議》,轉載必須註明作者和本文連結

令狐一衝

相關文章