gpt4 book ai didi

rust - 如何构建 Rust 代码以使 Vec> 具有调用 BarTrait 的能力

转载 作者:行者123 更新时间:2023-12-03 11:47:21 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Can I get a trait object of a multi-trait instance without using a generic type?

(1 个回答)


9 个月前关闭。




TL; 博士;
结构: TheirPointTheirLine特征: TheirShadowMySpecialShadow

TheirShadow for TheirPoint
TheirShadow for TheirLine

MySpecialShadow for TheirPoint
MySpecialShadow for TheirLine

let vec_shapes: Vec<Box<dyn TheirShadow>> = vec![Box::new(point), Box::new(line)];
问题:
for shape in vec_shapes {
shape.myspecialshadow_function()
//doesnt work - what can be done? Downcast? - but how to handle different types?
}
长版:
Playground
我正在使用 lib 并在 中使用它。
具体来说,我使用不同的形状( TheirPointTheirLine ),它们都有一个共同的
  • 输出:TheirOutput 是一个枚举
  • 函数:由 Trait cast_shadow 提供的 TheirShadow ,返回 TheirOutput

  • 我有一个 Vec<Box<dyn TheirShadow>>
    let vec_shapes: Vec<Box<dyn TheirShadow<Output=TheirOutput>>> = vec![Box::new(p), Box::new(l)];
    我创建了一个 Trait MySpecialShadow ,有一个函数 special_shadow ,我单独为 TheirPointTheirLine 实现,我很难在 vec_shapes 的循环中调用它。
    我尝试了以下但没有成功
    let vec_shapes: Vec<Box<dyn TheirShadow<Output=TheirOutput, MySpecialShadow>>> = vec![Box::new(p), Box::new(l)];
    您是否有建议如何构建代码,以便基于 dyn Trait 的混合 vec 能够调用其他特征?垂头丧气?混合 vec 看起来如何?
    感谢您的想法!

    最佳答案

    根据@pretzelhammer 评论的提示,我最终得到了这个 playground ,即使不是为不同的特征实现了相同的结构,它也可以工作,但是具有特征 1 的结构包裹在具有特征 2 的结构中。
    我仍然不确定,如果这是最明智的前进方式,所以如果有更好的概念来实现这样的解决方案,请分享!

    关于rust - 如何构建 Rust 代码以使 Vec<Box<dyn FooTrait>> 具有调用 BarTrait 的能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65144456/

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