trait X {}
trait Y {}
struct A {}
impl X for A {}
struct B<'r> {
x: &'r mut Box<dyn X + 'r>,
id: i32,
}
impl <'r> Y for B<'r> {}
struct Out {
x: Box<dyn X>,
}
impl Out {
pub fn new() -> Self {
return Out {
x: Box::new(A{})
}
}
pub fn get_data(&mut self) -> Box<dyn Y> {
return Box::new(B{
id: 1,
x: &mut self.x
})
}
}
Запустите его здесь на детской площадке.
Я получаю это примечание от компилятора:
note: but, the lifetime must be valid for the static lifetime...
= note: ...so that the expression is assignable:
expected &mut std::boxed::Box<dyn X>
found &mut std::boxed::Box<(dyn X + 'static)>
Я понимаю, откуда исходит статическое время жизни, но это же время жизни не передается в структуру B во время ее создания, которая принимает любое общее время жизни.
[Изменить после ответа ниже]
Я также пытался сделать структуру Out Out универсальной, но потомневозможно использовать его после инициализации.