是否可以从特征中获取实现类型?

时间:2017-07-14 13:49:08

标签: rust

当您使用特征在Vec中存储不同的通用结构时,是否可以从特征中取回实现类型?以下尝试传达了这个想法。

#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
struct AStruct<T> { a: T }

trait A { 
    fn downcast(&self) -> &Self;
}

impl<T> A for AStruct<T> where T: Eq { 
    fn downcast(&self) -> &AStruct<T> {
        &self
    }
}

fn main() {
    let mut v: Vec<Box<A>> = Vec::new();
    let a_num_box = Box::new(AStruct {a: 42});
    let a_str_box = Box::new(AStruct {a: "the answer"});
    v.push(a_num_box);
    v.push(a_str_box);
    let a: &AStruct<usize> = v[0].as_ref().downcast(); 
}

0 个答案:

没有答案