gpt4 book ai didi

rust - dyn A+B 可能吗?

转载 作者:行者123 更新时间:2023-12-04 13:08:42 27 4
gpt4 key购买 nike

我有一个实现AsyncWriteAsyncRead 的自定义套接字。我想将动态存储到此套接字,但我想同时使用 AsyncWrite/Read,如下所示:

#[derive(Clone)]
pub struct AsyncTransporter {
stream: Arc<dyn AsyncRead + AsyncWrite>,
}

但这不被支持。

60 |     stream: Arc<dyn AsyncRead + AsyncWrite>,
| --------- ^^^^^^^^^^ additional non-auto trait
| |
| first non-auto trait
|
= help: consider creating a new trait with all of these as super-traits and using that trait here instead: `trait NewTrait: tokio::io::AsyncRead + tokio::io::AsyncWrite {}`

如果我执行 trait NewTrait: tokio::io::AsyncRead + tokio::io::AsyncWrite {},这两个特征的方法将如何实现?

最佳答案

If I do trait NewTrait: tokio::io::AsyncRead + tokio::io::AsyncWrite {}, how will the methods of both traits be implemented?

trait NewTrait: tokio::io::AsyncRead + tokio::io::AsyncWrite {} 要求 NewTrait 的实现者首先实现 AsyncReadAsyncWrite,所以如果你有一个实现了 NewTrait 的类型,你可以依靠 AsyncReadAsyncWrite的方法就在那里。因此,与其说是“如何实现这两个特征的方法”,不如说是“如何为实现 AsyncRead 的任意类型实现 NewTraitAsyncWrite 并且对 NewTrait 一无所知?”

响应是,通过为实现两者的所有类型提供 NewTrait一揽子实现:

impl<T> NewTrait for T
where
T: AsyncRead + AsyncWrite
{
}

通过该实现,任何类型(即使是在另一个 crate 中定义的类型)同时实现了 AsyncReadAsyncWrite 也实现了 NewTrait

关于rust - dyn A+B 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67996683/

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