我的情况类似于以下情况:
use std::rc::Rc;
trait A {}
trait B: A {}
struct Impl {}
impl A for Impl {}
impl B for Impl {}
我希望能够像以下一样投射这些特征的特征对象:
fn main() {
let val: Rc<Box<A>> = Rc::new(Box::new(Impl {}));
let test: Rc<Box<B>> = val as Rc<Box<B>>;
}
这给了我一个编译器错误,这是一个非标量转换。我想我正在做错误的演员表,但我不知道这是怎么支持的。此外,我希望演员是安全的,即给我一个Option<Rc<Box<B>>
。这是可能的,还是实现了动态调度,使特征对象无法在特征之间转换?
编辑:我忘了说,我正在使用夜间版本,以防这件事重要。