gpt4 book ai didi

rust - 如何创建 DST 类型?

转载 作者:行者123 更新时间:2023-11-29 07:46:58 25 4
gpt4 key购买 nike

DST(动态大小类型)现在是 Rust 中的一个东西。我已经使用它们成功地使用了编译器已知的灵活的最后一个成员(例如 [u8])。

然而,我想要做的是创建一个自定义夏令时。比如说:

struct Known<S> {
dropit: fn (&mut S) -> (),
data: S,
}

struct Unknown {
dropit: fn (&mut ()) -> (),
data: (),
}

预期用途为 Box<Known<S>> => Box<Unknown> => Box<Known<S>> ,其中中间件不需要知 Prop 体类型。

注意:是的,我知道 Any ,不,我对使用它不感兴趣。

我对 Known 的布局建议持开放态度和 Unknown , 然而:

  1. size_of::<Box<Known>>() = size_of::<Box<Unknown>>() = size_of::<Box<u32>>() ;那就是它应该是一个细指针。
  2. 丢弃 Box<Unknown>删除其内容
  3. 克隆Box<Unknown> (假设一个可克隆的 S ),克隆它的内容
  4. 理想情况下,fn dup(u: &Unknown) -> Box<Unknown> { box u.clone() }作品

我在 (3) 和 (4) 上有特别的困难,我可以通过手动分配内存来解决 (3)(不使用 box,而是直接调用 malloc),但我更愿意提供一种惯用的体验用户。

我找不到任何关于如何通知 box 的文档大小合适的分配。

最佳答案

unsized object目前正好有两类:slice([T]),在里面增加了一个length成员;和 trait 对象(TraitTrait + Send&c.),它在其中添加了一个 vtable,其中包含一个知道对象有多大的析构函数免费。

目前没有任何机制可以声明您自己的各种未确定大小的对象。

关于rust - 如何创建 DST 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30174822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com