我在摆弄树木和特征时遇到了一种我不理解的行为。这是一个最小的(未编译的)示例:
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>>>,但不能按原样工作,我找不到令人满意的解释。
有人可以解释一下特征和生命周期是怎么回事吗?还有其他方法可以做到这一点吗?