DST(动态大小类型)现在是 Rust 中的一个东西。我有used他们成功地使用了编译器已知的灵活的最后一个成员(例如[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
and Unknown
, 然而:
-
size_of::<Box<Known>>() = size_of::<Box<Unknown>>() = size_of::<Box<u32>>()
;也就是说它应该是一个细指针。
- 掉落
Box<Unknown>
删除其内容
- cloning
Box<Unknown>
(假设一个可克隆的S
),克隆其内容
- 理想情况下,
fn dup(u: &Unknown) -> Box<Unknown> { box u.clone() }
works
我对(3)和(4)有特别的困难,我可以通过手动分配内存(不使用box
,但直接调用malloc
)但我更愿意为用户提供惯用的体验。
我找不到任何有关如何通知的文档box
分配的大小合适。
目前无大小对象正好有两种类型:切片 ([T]
),其中添加了长度成员;和特征对象(Trait
, Trait + Send
, &c.),其中添加了一个包含析构函数的 vtable,该析构函数知道要释放的对象有多大。
目前还没有任何机制可以声明您自己的各种未指定大小的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)