簡體   English   中英

為什么Rust不允許強制特征容器內的對象?

[英]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.

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