< 返回版块

Simon 发表于 2021-10-21 13:25

Tags:tokio,trait object

请教大神们,怎么写才能编译通过呢

decoder必须是用trait object


Ext Link: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1a510e37094c9241d31523bd5f8216a6

评论区

写评论
c5soft 2021-10-21 17:17

不清楚楼主要实现什么功能,把完整代码贴出来吧,只言片语不好解答。另外,建议尽早使用VSCode等本地集成开发环境,速度快得多。

Grobycn 2021-10-21 16:52

看 https://docs.rs/tokio-util/0.6.8/tokio_util/codec/trait.Decoder.html 定义。 Decoder: Sized,无法转化成 trait object

作者 Simon 2021-10-21 16:39

原因是 Box 没有实现 Decoder

--
👇
c5soft: 看代码不清楚要干什么,如果仅仅是要编译通过,可以这样改:

pub mod ttt {
    use anyhow::Result;
    use tokio::io::AsyncRead;
    use tokio_util::codec::{Decoder, FramedRead};

    async fn foo<D>(src: Box<dyn AsyncRead + Unpin>, decoder: impl Decoder) -> Result<()> {
        let reader = FramedRead::new(src, decoder);
        Ok(())
    }
}

#[tokio::main]
pub async fn main() {
    println!("it works");
}
c5soft 2021-10-21 15:34

看代码不清楚要干什么,如果仅仅是要编译通过,可以这样改:

pub mod ttt {
    use anyhow::Result;
    use tokio::io::AsyncRead;
    use tokio_util::codec::{Decoder, FramedRead};

    async fn foo<D>(src: Box<dyn AsyncRead + Unpin>, decoder: impl Decoder) -> Result<()> {
        let reader = FramedRead::new(src, decoder);
        Ok(())
    }
}

#[tokio::main]
pub async fn main() {
    println!("it works");
}
1 共 4 条评论, 1 页