如何创建DST类型?
DST(动态大小类型)现在是Rust中的一件事。 我已经成功地使用了它们,编译器已知的灵活的最后一个成员(例如[u8]
)。
但是,我期望做的是创建自定义DST。 说,例如:
struct Known<S> {
dropit: fn (&mut S) -> (),
data: S,
}
struct Unknown {
dropit: fn (&mut ()) -> (),
data: (),
}
预期使用情况是Box<Known<S>>
=> Box<Unknown>
=> Box<Known<S>>
,其中中间件不需要知道具体类型。
注意:是的,我知道Any
,不,我不感兴趣使用它。
然而,我对“ Known
和“ Unknown
”版式的建议持开放Unknown
:
size_of::<Box<Known>>() = size_of::<Box<Unknown>>() = size_of::<Box<u32>>()
; 那就是它应该是一个细小的指针。 Box<Unknown>
删除其内容 Box<Unknown>
(假设一个可克隆的S
),克隆它的内容 fn dup(u: &Unknown) -> Box<Unknown> { box u.clone() }
起作用 我对(3)和(4)有特别的困难,我可以通过手动分配内存来解决(3)(不是使用box
,而是直接调用malloc
),但我更愿意为用户提供一种惯用的体验。
我找不到任何有关如何通知正确大小分配box
的文档。
目前有两类未处理的对象:slices( [T]
),它添加了一个长度成员; 和trait对象( Trait
, Trait + Send
,&c。),它添加了一个包含析构函数的vtable,该析构函数知道要释放多大的对象。
目前没有任何机制来声明你自己的各种未经处理的对象。
链接地址: http://www.djcxy.com/p/26135.html