Warum lässt Rust nicht zu, dass Zwang Objekte in Containern kennzeichnet?

8

Ich habe ein Vec<Box<T>> wo T implementiert Foo . Warum kann ich es nicht zu einem Vec<Box<Foo>> zwingen, obwohl ich irgendetwas vom Typ Box<T> in ein Box<Foo> zwingen kann? Warum wird der folgende Code nicht kompiliert?

%Vor%     
Jason Teplitz 27.01.2017, 08:33
quelle

1 Antwort

12

Weil Box<Bar> eine andere Größe hat als Box<Foo> . Der Zwang ist für einen einzelnen -Wert zulässig, aber hier müssten Sie die Größe des gesamten Vektors ändern. Das Buch geht dazu im Abschnitt Darstellung von Merkmalsobjekten näher ein. Kurze Version: Box<Bar> ist ein Zeiger auf einen Wert. Box<Foo> ist ein Zeiger auf einen Wert und ein Zeiger auf eine vtable.

    
DK. 27.01.2017, 08:44
quelle

Tags und Links