如何解决在Rust中使用相同的界面来管理多种结构类型的正确模式
我正在用Rust实现异步TCP和TLS流,并希望相同的代码支持两种情况。目前,我最终将所有流定义为
enum Stream {
TCP(Async::<TcpStream>),TLS(TlsStream<Async::<TcpStream>>)
}
但这意味着我需要使用match来挖掘流。我不认为这是行之有效的方法。
我试图通过特征(接口)定义使用的流
tx_stream: Arc<dyn AsyncWriteExt + Send + 'static>
但是抱怨不知道类型的大小。另外,Stream类具有很多特征,我认为我不应该将它们全部标记到实现中。
最后,我正在考虑使用泛型,但是我猜想代码大小会加倍,因为将有两种不同的结构,并且需要相应地生成相关代码。
完成这样的事情的“专业”方式是什么?在C ++中,工厂类后面的接口类和两个不同的对象可以解决问题。我相信用Rust可以有一些聪明的方法,但是到目前为止还没有发现任何明智的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。