Wie verwenden Sie in Rust tatsächlich Typen mit dynamischer Größe?

Theoretisch sind DST-Typen (Dynamically-Sized Types) gelandet, und wir sollten jetzt in der Lage sein, Typinstanzen mit dynamischer Größe zu verwenden. Praktisch kann ich es weder zum Laufen bringen noch die Tests verstehen.

lles scheint sich um das @ zu drehSized? Schlüsselwort ... aber wie genau verwenden Sie es?

Ich kann einige Typen zusammenfassen:

// 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
}

... aber wie erstelle ich eine Instanz vonHasFoo, was DST ist, um entweder ein @ zu habBar oderBar2?

er Versuch, dies zu tun, scheint immer zu folgendem Ergebnis zu führen:

<anon>:28:17: 30:4 error: trying to initialise a dynamically sized struct
<anon>:28   let has_foo = &HasFoo {

Ich verstehe im Großen und Ganzen, dass Sie keinen bloßen Typ mit dynamischer Größe haben können. Sie können nur eine Schnittstelle mit einem Zeiger herstellen, aber ich kann nicht herausfinden, wie das geht.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage