gpt4 book ai didi

rust - 如何将流向量映射到偷看对象?

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

我有N个futures::Stream,其中每个Item都有一个时间戳。我想将它们合并排序到单个流中,所以我想将所有流转换为可窥视对象:

fn merge_streams(
mut streams: Vec<Box<dyn futures::Stream<Item = Data>>>,
) -> impl futures::Stream<Item = Data> {
async_stream::try_stream! {
let n = streams.len();
let streams: Vec<_> = streams.into_iter().map(|s| s.peekable()).collect();
}
}
我被这个错误困住了:
error: the `peekable` method cannot be invoked on a trait object
|
| let streams: Vec<_> = streams.into_iter().map(|s| s.peekable()).collect();
peekable()需要 Self: Sized
这是否意味着 T.peekable()Box<T>.peekable需要在编译时知道 sizeof(T)?如果是这样,为什么?什么是解决方法?
我试过了
  • Vec<Box<dyn Stream>>
  • Vec<Box<dyn Stream + Sized>>
  • Vec<Box<_>>
  • Vec<&mut dyn Stream>
  • Vec<&mut dyn Stream + Sized>
  • 最佳答案

    使用 BoxStream (由 StreamExt::boxed 轻松创建):

    use futures::{StreamExt, stream::BoxStream}; // 0.3.5

    fn merge_streams(streams: Vec<BoxStream<()>>) {
    streams.into_iter().map(|s| s.peekable()).count();
    }

    关于rust - 如何将流向量映射到偷看对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63494407/

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