Mam pewne problemy z dynamicznymi typami wskaźników wysyłki w Rust. Chcę przekonwertować wartość typu Box<MyTrait>
na &mut MyTrait
, aby przejść do funkcji. Na przykład, próbowałem:Konwertuj zapakowaną cechę na referencję cech zmiennych w Rust
use std::borrow::BorrowMut;
trait MyTrait {
fn say_hi(&mut self);
}
struct MyStruct { }
impl MyTrait for MyStruct {
fn say_hi(&mut self) {
println!("hi");
}
}
fn invoke_from_ref(value: &mut MyTrait) {
value.say_hi();
}
fn main() {
let mut boxed_trait: Box<MyTrait> = Box::new(MyStruct {});
invoke_from_ref(boxed_trait.borrow_mut());
}
ten nie powiedzie się z powodu następującego błędu:
error: `boxed_trait` does not live long enough
--> <anon>:22:5
|
21 | invoke_from_ref(boxed_trait.borrow_mut());
| ----------- borrow occurs here
22 | }
| ^`boxed_trait` dropped here while still borrowed
|
= note: values in a scope are dropped in the opposite order they are created
dziwo, to działa na &MyTrait
ale nie dla &mut MyTrait
. Czy jest jakiś sposób, aby przekonwertować tę konwersję do pracy w zmiennym przypadku?