gpt4 book ai didi

rust - rust 病中可能存在具有大小特征的多态性吗

转载 作者:行者123 更新时间:2023-12-03 11:29:53 25 4
gpt4 key购买 nike

我正在使用一个库,该库公开了一个要求它为 Sized 的特征。 .
我正在使用一个实现此特征的对象,并尝试创建一个包含所有这些实例的数组。对于非大小特征,我会使用 Vec<Box<dyn MyNonSizedTrait>> 之类的东西,但使用 Sized特质是不可能的,编译器提示the trait MySizedTrait cannot be made into an object .
有没有办法解决这个问题?
这是我正在尝试做的一个例子:

trait A: Sized {
fn do_something(&self);
}

struct B;

impl A for B {
fn do_something(&self){
println!("This is B")
}
}

struct C;

impl A for C {
fn do_something(&self) {
println!("This is C")
}
}


fn my_do_something(d: &[Box<dyn A>]) {
for i in d {
i.do_something();
}
}

fn main() {
let mut d: Vec<Box<dyn A>> = Vec::new();
d.push(Box::new(B));
d.push(Box::new(C));
my_do_something(&d);
}

最佳答案

dyn Trait根据定义,总是无大小的,因为它允许它后面的对象具有 0 中的任意大小至isize::MAX .
要拥有固定大小的对象和多态性,请使用 enum .然后您可以添加 implenum将调用分派(dispatch)给变体的本身。有一些hacky crates自动化。

关于rust - rust 病中可能存在具有大小特征的多态性吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62973719/

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