我正在尝试获取一个动态可分配借用,以访问实现Reader
和Seek
两个trait的对象实例。
我知道只要涉及一个trait,Rust就可以进行动态分发。
use std::io::{Read, Seek};
fn user(stream: &mut Read) {}
然而,如果有两个或更多的特质边界,我就必须使用类型参数:
fn user_gen<T: Read + Seek>(stream: &mut T) {}
作为实际类型下面的一个构建器,它必须以某种方式存储借用的对象,并且使用类型参数会使实现更加复杂(我已经有三个类型参数了)。
理想情况下,我希望能做到这样:
fn user_dynamic(stream: &mut (Read + Seek)) {}
这段代码无法编译:
error[E0225]: only auto traits can be used as additional traits in a trait object
--> src/main.rs:3:38
|
3 | fn user_dynamic(stream: &mut (Read + Seek)) {}
| ^^^^ non-auto additional trait
我了解动态分派是通过fat指针实现的,通常这些指针只引用一个方法表而不是多个。我没有见过支持此功能的静态编译语言,但这个特性对我会有很大帮助。