我希望有一个trait对象包装的LinkedList。内部是Ssl或Non-Ssl流的流类型。我的希望是传递结构体包装器,并且只要内部符合相同的trait,无论使用哪种内部流类型,一切都将正常。
简单示例:
产生以下错误:
我尝试将
在Rust中是否可以实现这个功能?如果可以,语法是什么?
简单示例:
use std::sync::{Arc, Mutex};
use std::collections::LinkedList;
use std::os::unix::io::{RawFd, AsRawFd};
pub trait HRecv {}
pub trait HSend {}
pub trait HStream: HRecv + HSend + AsRawFd + Clone {}
pub struct Stream<T: HStream> {
pub inner: T
}
pub type StreamList = Arc<Mutex<LinkedList<Stream<HStream>>>>;
fn main() {
let mut list = Arc::new(Mutex::new(LinkedList::<Stream<HStream>>::new()));
}
产生以下错误:
error: the trait 'core::marker::Sized' is not implemented for the type 'HStream' [E0277]
let mut list = Arc::new(Mutex::new(LinkedList::<Stream<HStream>>::new()));
^~~~~~~~~~~~~~~
我尝试将
+ Sized
添加到HStream
的定义中,以及使inner
成为Box<T>
,但两者都会产生相同的错误。在Rust中是否可以实现这个功能?如果可以,语法是什么?