小编Fab*_* H.的帖子

为什么使用特征时参数类型必须是“static”

我在摆弄树木和特征时遇到了一种我不理解的行为。这是一个最小的(未编译的)示例:

trait Trait<T> {}
struct Struct<T> {
    option: Option<Box<dyn Trait<T>>>, // change this to Option<Box<TestStruct<T>>>
                                       // and it works without issues
}
impl<T> Trait<T> for Struct<T> {}

fn set<T>(s: &mut Struct<T>) {                         // works when changed to "fn set <T: 'static> ..."
    s.option = Some(Box::new(Struct { option: None })) // "error[E0310]: the parameter type `T` may not live long enough"
}
Run Code Online (Sandbox Code Playgroud)

所以这段代码可以与T: 'staticor 一起使用Option<Box<TestStruct<T>>>,但不能按原样工作,我找不到令人满意的解释。

有人可以解释一下特征和生命周期是怎么回事吗?还有其他方法可以做到这一点吗?

traits lifetime rust

3
推荐指数
1
解决办法
744
查看次数

标签 统计

lifetime ×1

rust ×1

traits ×1