В теории, Dynamically-Sized Types (DST) приземлились, и теперь мы должны иметь возможность использовать экземпляры типа с динамическим размером. Практически говоря, я не могу заставить его работать и не разбираться в тестах.
Все, кажется, вращается вокруг ключевого слова Sized?
... но как именно вы его используете?
Я могу добавить несколько типов:
// 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
}
... но как создать экземпляр HasFoo
, который является DST, иметь либо Bar
, либо Bar2
?
Попытка сделать это всегда, кажется, приводит к:
<anon>:28:17: 30:4 error: trying to initialise a dynamically sized struct
<anon>:28 let has_foo = &HasFoo {
Я понимаю в широком смысле, что у вас не может быть голой тип с динамическим размером; вы можете взаимодействовать только с одним через указатель, но я не могу понять, как это сделать.