Sto scrivendo codice wrapper per una libreria C esterna e sto cercando di convincere il compilatore di Rust a far rispettare le restrizioni di durata esterna che non si riflettono nel codice Rust stesso. Ad esempio, un tipo di "handle opaco" può restituire un handle figlio che è valido solo per la durata dell'handname padre.Come si impone la durata della struttura padre-figlio?
Ho sperimentato con std::marker::PhantomData
, ma non ho potuto convincere il compilatore a restituire l'errore previsto.
In altre parole, mi piacerebbe il seguente blocco di codice non riuscire a compilare:
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();
}
Presumo ci sia qualche motivo non si vuole andare avanti e aggiungere un riferimento al 'Parent' nel' Child'? – Shepmaster