Ich schreibe Wrapper-Code für eine externe C-Bibliothek, und ich versuche, den Rust-Compiler zu überzeugen, externe Lebensdauerbeschränkungen durchzusetzen, die nicht im Rust-Code selbst widergespiegelt werden. Zum Beispiel kann ein Typ von "undurchsichtigem Handle" ein Kind-Handle zurückgeben, das nur für die Lebensdauer des Eltern-Handles gültig ist.Wie erzwinge ich die Lebensdauer der Eltern-Kind-Struktur?
Ich experimentierte mit , aber ich konnte den Compiler nicht überzeugen, den erwarteten Fehler zurückzugeben.
Mit anderen Worten, würde ich den folgenden Codeblock wie nicht kompiliert:
struct Parent;
struct Child; // Note that there is no reference to the parent struct
impl Parent {
fn get_child(&self) -> Child {
Child
}
}
// I'd like this to complain with "p does not live long enough"
fn test() -> Child {
let p = Parent;
p.get_child()
}
fn main() {
let c = test();
}
Ich gehe davon aus, dass ein Grund, warum Sie nicht wollen, gehen Sie vor und einen Verweis auf den 'Parent' im' Child' hinzufügen? – Shepmaster