gpt4 book ai didi

generics - 为什么 Rust 不允许强制转换容器内的特征对象?

转载 作者:行者123 更新时间:2023-11-29 07:45:08 28 4
gpt4 key购买 nike

我有一个 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> .允许对单个 值进行强制转换,但在这里您必须调整整个向量的大小。这本书在关于 Representation of Trait Objects 的部分对此进行了一些详细介绍。 .短版:Box<Bar>是一个指向值的指针。 Box<Foo>是一个指向值的指针一个指向虚表的指针。

关于generics - 为什么 Rust 不允许强制转换容器内的特征对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41889727/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com