¿Cómo se utilizan tipos de tamaño dinámico en Rust?
En teoría, los tipos de tamaño dinámico (DST) han aterrizado y ahora deberíamos poder usar instancias de tipo de tamaño dinámico. Hablando prácticamente, no puedo hacer que funcione, ni entender las pruebas que lo rodean.
Todo parece girar en torno a laSized?
palabra clave ... pero, ¿cómo se usa exactamente?
Puedo poner algunos tipos juntos:
// Note that this code example predates Rust 1.0
// and is no longer syntactically valid
trait Foo for Sized? {
fn foo(&self) -> u32;
}
struct Bar;
struct Bar2;
impl Foo for Bar { fn foo(&self) -> u32 { return 9u32; }}
impl Foo for Bar2 { fn foo(&self) -> u32 { return 10u32; }}
struct HasFoo<Sized? X> {
pub f:X
}
... pero ¿cómo creo una instancia deHasFoo
, que es DST, para tener unaBar
oBar2
?
Intentar hacerlo siempre parece tener como resultado:
<anon>:28:17: 30:4 error: trying to initialise a dynamically sized struct
<anon>:28 let has_foo = &HasFoo {
En términos generales, entiendo que no puedes tener un tipo desnudo de tamaño dinámico; solo puedes interactuar con uno a través de un puntero, pero no puedo entender cómo hacerlo.