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?
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.