簡體   English   中英

以 Sized 為界的特征向量

[英]Vector of traits bounded by Sized

我正在嘗試查看是否有任何方法可以實現大小特征向量。 我知道特征對象,如果traitName?Sized ,則使用Vec<Box<dyn traitName>> 但是如果我有( https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=43d9ee07cfe643d32a00963aa066c929 ):

trait A: Sized {}

struct B {
    c: u64,
}
impl A for B {}

fn lol() -> Vec<A> {
    let mut a: Vec<A> = Vec::new();
    
    let b = B { c: 2} ;
    
    a.push(b);
    
    a
}

我得到的錯誤是

8 | fn lol() -> Vec<A> {
  |                 ^
  |
help: add `dyn` keyword before this trait

但要解決這個問題,我必須使用特征對象,因為A: Sized是不可能的。 有什么辦法可以解決這個問題還是不可能?

A其中A是一個特征只是dyn A的舊語法(在 2021 版中被禁止)。 如果A: Sized永遠無法創建Adyn A

如果您將在 2018 版中運行它, 您將收到錯誤“在編譯時無法知道類型值的大小(dyn A + 'static)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM