Downcasting und Box <Any>

pub struct WidgetWrap {
    // ...
    widget: RefCell<Box<Any>>,
}

Irgendwann möchte ich besetzenBox<Any> zuBox<WidgetTrait>

let mut cell = widget.borrow_mut();
let w = cell.downcast_mut::<Box<WidgetTrait>>();

Dies gibt mir einen Fehler dieser Art:

error: instantiating a type parameter with an incompatible type
`Box<WidgetTrait>`, which does not fulfill `'static` [E0144]

Was heißt das eigentlich?

Ich habe angeschautWie zu beheben: Wert kann Verweise enthalten; addiere `'static` gebunden an` T` und habe versucht, hinzuzufügen+ 'static überall.

pub struct WidgetWrap {
    // ...
    widget: RefCell<Box<Any + 'static>>,
}
let mut cell = widget.borrow_mut();
let w = cell.downcast_mut::<Box<WidgetTrait + 'static>>();

Es behebt die Kompilierungsfehler, schlägt jedoch fehl, wenn ich versuche, die heruntergekommene Box wie oben gezeigt auszupacken. Und ja, der Inhalt der Box ist ein Objekt, das implementiert wirdWidgetTrait.

Natürlich programmiere ich in Rust auf einer Ebene, die ich nicht ganz verstehe, aber vielleicht kann mir jemand helfen, die Konzepte, die mit der obigen Aufgabe verbunden sind, besser in den Griff zu bekommen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage