如何创建 DST 类型?

2023-11-25

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, 然而:

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

我对(3)和(4)有特别的困难,我可以通过手动分配内存(不使用box,但直接调用malloc)但我更愿意为用户提供惯用的体验。

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


目前无大小对象正好有两种类型:切片 ([T]),其中添加了长度成员;和特征对象(Trait, Trait + Send, &c.),其中添加了一个包含析构函数的 vtable,该析构函数知道要释放的对象有多大。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建 DST 类型? 的相关文章

随机推荐

  • 无法验证以下目标配置(S3 到 SQS)

    我正在尝试使用无服务器设置一个工作流程 该工作流程创建一个新的 S3 存储桶 一个新的 SQS 队列 当在 S3 存储桶中创建一个对象时 将消息放入队列中 并在队列上有足够的消息时启动 lambda队列 我的资源块中有以下内容 resour
  • WinForms | C# |在文本框中间自动完成?

    我有一个自动完成功能的文本框 如下所示 txtName AutoCompleteMode AutoCompleteMode Suggest txtName AutoCompleteSource AutoCompleteSource Cust
  • Ascii 文件中的 Python BOM 错误

    我在使用 Python 2 6 时遇到了一个奇怪且烦人的问题 我正在尝试在我的嵌入式 Linux ARM 板上运行此文件 以及其他文件 http svn tuxisalive com software suite v3 smart core
  • python multiprocessing.Pool杀死*特定*长时间运行或挂起的进程

    我需要执行许多并行数据库连接和查询的池 我想使用 multiprocessing Pool 或并发 futures ProcessPoolExecutor Python 2 7 5 在某些情况下 查询请求花费太长时间或永远无法完成 挂起 僵
  • Java中如何对URL进行编码以避免特殊字符? [复制]

    这个问题在这里已经有答案了 我需要java代码来编码URL以避免特殊字符 例如空格和 和 等 URL 构造很棘手 因为 URL 的不同部分对于允许使用的字符有不同的规则 例如 加号在 URL 的查询部分中保留 因为它代表空格 但在 URL
  • 从 wav 文件读取样本

    我正在尝试用 html5 制作一个网页 它将 wav 文件中的示例数据存储在数组中 有没有办法用javascript获取样本数据 我正在使用文件输入来选择 wav 文件 在 javascript 中我已经添加了 document getEl
  • 使用 git 有效地重写(rebase -i)大量历史记录

    我有一个 git 存储库 最新版本中有大约 3500 个提交和 30 000 个不同的文件 它代表了多人大约 3 年的工作成果 我们已获得将其全部开源的许可 我正在努力发布整个历史记录 而不仅仅是最新版本 为此 我感兴趣的是 回到过去 并在
  • JavaScript 中对象的“内部槽”是什么?

    我试图从一点上理解 ECMAScript 2015 规范 对象的内部槽 但这一段对我来说似乎很不清楚 尤其是这句话 内部槽对应于与对象关联并由各种 ECMAScript 规范算法使用的内部状态 它使用正确的语法吗 有人能用英语解释这个概念吗
  • 在 Windows 7 上,node.js 安装程序失败并显示“CAQuietExec Failed”和 1603 错误代码

    我试图在 Windows 7 上安装 node js 但是 每次我尝试安装时都会出现以下错误 MSI s A0 64 20 01 44 207 Executing op CustomActionSchedule Action Registe
  • 如何在 GitHub Actions CI/CD 中构建 Flutter

    我正在尝试 GitHub Actions 来构建我的 Flutter 应用程序 但我不知道该选择哪个容器映像 是否有可用于 Flutter 的可信容器镜像 我需要进行哪些调整才能在构建步骤中使用 Flutter SDK Run flutte
  • 我可以从 xaml 中过滤集合吗?

    我有一个 wpf mvvm 应用程序 我的视图模型中有一个可观察的集合 public ObservableCollection
  • 如何在表单POST方法中传递jquery datepicker值?

    我在日期表单中有一个输入文本 我使用 JQuery datepicker 来选择日期
  • x86 给定 AH 和 AL 计算 AX?

    我在理解x86汇编中的寄存器时遇到困难 我知道EAX是完整的32位 AX是低16位 然后AH和AL是AX的高8位和低8位 但我正在做一个问题 如果 AL 10 且 AH 10 AX 中的值是多少 我对此的想法是将 10 转换为二进制 101
  • 无法解析的 StackExchange API 响应

    我编写了一个小程序来分析来自 StackExchange API 的个人资料数据 但该 API 向我返回了无法解析 无法读取的数据 收到的数据 使用c 自行下载 u001f b 0 0 0 0 0 u0004 0mRMo 0 f d c u
  • 如何在 3D 中对固定点进行多项式拟合

    我在 3D 空间中有一组 x y z 点和另一个名为charge它表示存储在特定 x y z 坐标中的电荷量 我想对此数据进行加权 按探测器中沉积的电荷量进行加权 这恰好对应于更多电荷的更高权重 以便它通过给定点 顶点 现在 当我在 2D
  • Hibernate 标准 api“选择”

    是否可以使用 hibernate Critiria api 创建 select in 查询 例子 我有两个 1 n 关系的表 公司和部门 select from company c where c id in select company
  • 数组和&array[0]之间的区别

    int array 1 2 3 4 我认为 array只是一个指向 array 0 但怎么会呢sizeof array 知道数组的大小而不仅仅是知道它只是 4 字节数字 尽管在某些上下文中数组的名称确实成为指向其初始成员的指针 例如将数组传
  • PHP 中如何将 pi 计算为指定位数?

    如何在 PHP 中计算 pi 的值 最多 X 个十进制数字 4 位小数 3 141 64位小数 3 141592653589793238462643383279502884197169399375105820974944592 找到 Kon
  • 例外:没有标头提供者! (应用程序 -> Api -> 标头)

    只是不明白为什么我仍然遇到这个缺少标头提供程序的问题 我的 bootstrap ts import enableProdMode provide from angular2 core import bootstrap ELEMENT PRO
  • 如何创建 DST 类型?

    DST 动态大小类型 现在是 Rust 中的一个东西 我有used他们成功地使用了编译器已知的灵活的最后一个成员 例如 u8 然而 我想做的是创建自定义 DST 比如说 struct Known