rust用struct保存特定trait的引用

结构体保存一个实现了某个trait的引用,只要是保存引用就必须显式的加lifetime,实现如下:
注意是实现了某个trait的类型的引用,而不是trait object
(只是保存而已,记不住…)

trait DeriveTrait{
    fn hello(&self)->i32;
}

struct Base<'a,T:DeriveTrait+'a>{
    pt:&'a mut T, } impl<'a,T:DeriveTrait> Base<'a,T> { fn new(t:&'a mut T)->Base<T>{
        Base{
            pt:t
        }
    }

    fn print(&self){
        println!("hello from derive:{}",self.pt.hello());
    }
}

struct Foo;

impl DeriveTrait for Foo{
    fn hello(&self)->i32{
        100
    }
}

fn main(){
    let mut f = Foo;
    let b = Base::new(&mut f);
    b.print();
}

Play地址:http://is.gd/lIOAA6
输出结果:

hello from derive:100

这个列子可以实现把部分功能放在derive里,derive只需要实现这些trait就可以把自己的引用传递给base,这个比较方便库的封装,库保留一个接口给user,user实现了接口就可以实现回调

你可能感兴趣的:(Rust,lifetime,trait的引用)