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实现了接口就可以实现回调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值