小编fru*_*hon的帖子

装箱特征如何影响传递给它的参数的生命周期?(有一个非常具体的例子)

这是一个非常简单但具体的示例,它会产生我无法理解的编译错误:

use std::path::Path;

trait MyTrait<T> {
    fn my_func(&self, t: T);
}

struct MyImpl {}

impl MyTrait<&Path> for MyImpl {
    fn my_func(&self, t: &Path) {
        println!("{:?}", t)
    }
}

struct MyWrapper<T> {
    inner: Box<dyn MyTrait<T>>
}

impl<T> MyWrapper<T> {
    pub fn new(inner: Box::<dyn MyTrait<T>> ) -> Self { 
        Self { inner } 
    }
}

impl<T> MyTrait<T> for MyWrapper<T> {
    fn my_func(&self, t: T) {
        self.inner.my_func(t);
    }
}

fn foobar() {
    let the_impl = MyImpl{};        
    //let the_impl = MyWrapper::new(Box::new(the_impl)); // (*) 
    
    for …
Run Code Online (Sandbox Code Playgroud)

boxing traits lifetime rust

5
推荐指数
1
解决办法
145
查看次数

标签 统计

boxing ×1

lifetime ×1

rust ×1

traits ×1