![](/img/trans.png)
[英]Why does a generic method inside a trait require trait object to be sized?
[英]Why does Rust not allow coercion to trait objects inside containers?
我有一個Vec<Box<T>>
,其中T
實現了Foo
。 為什么我不能將它強制轉換為Vec<Box<Foo>>
即使我可以將Box<T>
任何類型強制轉換為Box<Foo>
? 為什么以下代碼無法編譯?
use std::vec;
trait Foo {}
struct Bar {}
impl Foo for Bar {}
fn main() {
let v = vec![Box::new(Bar {})];
let v_1 = v as Vec<Box<Foo>>;
}
因為Box<Bar>
的大小與Box<Foo>
。 強制允許單個值,但在這里你必須調整整個向量的大小。 本書在“ 特征對象表示 ”一節中詳細介紹了這一點。 簡短版本: Box<Bar>
是一個指向值的指針。 Box<Foo>
是指向值的指針和指向vtable的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.