如何安全地投射Rc <box <a>&gt;进入Rc <box <b>&gt;如果特质B:A

时间:2017-03-02 21:23:45

标签: casting rust traits

我的情况类似于以下情况:

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>>。这是可能的,还是实现了动态调度,使特征对象无法在特征之间转换?

编辑:我忘了说,我正在使用夜间版本,以防这件事重要。

0 个答案:

没有答案