gpt4 book ai didi

rust - 在结构内部向下转换Box

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

我有些困难地把我的头缠在垂头丧气的地方。
我有一个包含Boxed特性的结构,例如:

struct MyContainer {
reader: Box<dyn std::io::Read>,
}
如何将 reader转换为我的已知类型?
这是我要执行的操作的最小示例:
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2015&gist=14b44be2412342d851d3c83fd9e080b0
通常,我会在特征上创建一个 as_any(&self),这将导致产生 &dyn Any,但这是我不拥有的外来特征。

最佳答案

定义自己的同时具有AnyRead的特征作为 super 特征,然后将其用作dyn类型。

trait DowncastableRead: Read + Any {
fn as_any(&self) -> &dyn Any;
}
impl<T: Read + Any> DowncastableRead for T {
fn as_any(&self) -> &dyn Any {
self
}
}

struct MyContainer {
reader: Box<dyn DowncastableRead>,
}
经过这些更改, your desired code will run
无法避免定义自己的特征,因为 dyn需要指定 exactly one non-auto trait(带有一个vtable指针),才能获得 Read的功能和 Any的功能,您需要定义一个将它们结合在一起的特征(并定义一个支持两种方法)。

关于rust - 在结构内部向下转换Box <dyn ForeignTrait>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66249044/

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