您的位置:首页 > 大数据 > 人工智能

rust用struct保存特定trait的引用

2015-08-31 12:37 381 查看
结构体保存一个实现了某个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实现了接口就可以实现回调
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: