包含具有特征参数的结构的框的大小

2024-01-03

我需要一个包含特征对象及其自身的结构。令人失望的是,以下代码无法编译:

trait Foo {}

struct Bar<T: Foo> {
    bars: Vec<Box<Bar<dyn Foo>>>,
    foo: T,
}

我设法通过添加来强制编译?Sized势必T,但我不明白为什么会这样。我认为这是因为所有特征对象都具有相同的大小,但是Bar取决于混凝土类型的尺寸T。如果是这样,怎么样Bar与一个未定尺寸的T代表在内存中?具体来说,什么在堆上跟踪其大小以及为什么不能在大小确定的情况下使用此机制。


方式dyn Foo在编译时没有已知的大小。所以当你写的时候Bar<dyn Foo>,编译器将不允许这样做,因为(默认情况下)必须调整类型参数的大小。编译器建议您通过允许来修复此问题T无法调整大小,这是必要的T to be dyn Foo.

how is Bar与一个未定尺寸的T代表在内存中?

一个结构最多允许有一个未调整大小的字段。然后将其数据布置在内存中,首先确定大小的字段,最后是未确定大小的字段。这个限制意味着所有字段的相对内存地址可以在编译时知道。一个结构体带有?Sized类型参数本身可以是已调整大小的,也可以是未调整大小的,具体取决于其参数的具体类型。当结构未调整大小时,它不能进入​​堆栈,因此只能从指针后面使用它。

目前没有关于此类对象的文档。它不完全是一个特征对象,但它是一个指向可能无法确定大小的对象的指针。正如您的示例所示,这是有效的。但我不能告诉你在哪里vtable指针被存储是因为我不知道,而且我不知道如何找到。

具体来说,什么在堆上跟踪其大小以及为什么不能在大小确定的情况下使用此机制。

每个对象的大小实际上并没有改变——只是每个实例可能不同。机制can被用于“在Sized案例”,但您没有尺寸合适的案例!即使是T即尺寸为bars集合将包含盒子Bar<dyn Foo>没有尺寸的。这就是为什么你需要T: ?Sized(相对于T: !Sized),说这种类型适用于T要么已调整大小,要么未调整大小。

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

包含具有特征参数的结构的框的大小 的相关文章

随机推荐

  • 如何在单个图表中可视化多态调用?

    首先 看一下这些Java代码 Drawable java package examples simple model public interface Drawable public void draw 形状 java package ex
  • 如何找到jqgrid中的最后一行

    目前我正在研究 jqgrid 我必须找出最后一行并实现 ctrl down 功能 但目前我无法获得最后一排 这里需要有人帮助 提前致谢 如果网格 id 是例如list那么下面的表达式应该返回最后一行 list find gt tbody g
  • 如何使用 clojure 作为 Java 程序的脚本语言?

    对于用 Java 编写的服务器程序 我需要为 待指定的 查询语言添加解释器 用户应该能够将自己编写的查询 程序 发送到该服务器 并接收返回的结果 基本上只是一个字符串列表 查询的语言尚未指定 所以我想在这里使用 clojure 作为脚本语言
  • Google 图表 - 避免在 yAxis 中显示负值

    我有以下代码 function drawVisualization Create and populate the data table var data google visualization arrayToDataTable Year
  • 如何使用python解析ld+json

    我一直在尝试一些网络抓取 并且发现了位于此标签内的一些有趣的数据
  • Swift 中如何判断泛型是否是可选的?

    我想用一个函数扩展一个数组 该函数将返回数组中所有非零项的计数 理想情况下 这适用于任何可选或非可选类型的数组 我尝试了各种方法 但都无法编译 使 Xcode 崩溃或两者兼而有之 我本以为它会是这样的 extension Array fun
  • `const T` 和 `T` 在获取其嵌套类型时没有区别吗?

    include
  • 在 ASP.Net Core 中全局设置日志记录范围

    我想要获取 ASP Net Core 服务中每条日志消息中记录的某些关键信息 服务名称 服务版本 主机名等 我有以下代码 public class Program public static void Main string args va
  • 如何在keras中实现自定义指标?

    我收到此错误 sum 得到了意外的关键字参数 out 当我运行这段代码时 import pandas as pd numpy as np import keras from keras layers core import Dense Ac
  • 如何制作自定义键盘布局?

    为 Windows 制作键盘布局的最佳方法是什么 具体来说 这种布局将出现在 文本服务和输入语言 列表中 而无需购买昂贵的软件 我了解 Microsoft Keyboard Layout Creator 但发现它完全受到限制 因为您无法执行
  • C# mongodb驱动2.2.3如何设置游标的batchSize

    我正在使用 MongoDB 2 2 3 的官方 C 驱动程序 如何使用 C 驱动程序设置光标的批量大小 使用 javascript 我可以创建一个光标并为其设置批量大小 var cursor db statistics find query
  • 有效地查找集合中的项目[重复]

    这个问题在这里已经有答案了 如果我需要在集合中找到一个对象 该集合不包含用作索引的自然键 因此我无法使用 Map 有几种不同类型的谓词用于搜索集合 看起来效率很低 const items Array from mySet const fou
  • Laravel 公共文件夹

    我想知道是否有人可以解释为什么 Laravel 应用程序的 index php 文件位于公共目录中 如果我将其移至根目录 会有哪些风险 laravel 公共文件夹中的文件和文件夹旨在可通过网络访问 为了安全起见 laravel 框架中的所有
  • 如何修复 django.db.utils.DatabaseError

    如何修复 Django 数据库错误 我将 MongoDB 与 Djongo 一起使用 一切都工作正常 直到最近我决定添加 NewApp 每当我尝试迁移时 它都会向我打招呼 django db utils DatabaseError 我尝试手
  • jQuery循环幻灯片调整大小问题

    在此页面上 中间有一个 100 宽度的启动屏幕 并且每 8 秒旋转一次图形图像 我在这张幻灯片中有 3 个 div 主 div 包含幻灯片 内部 div 具有中继器背景图像 内部 div 内部具有渐变图像 问题1 当您尝试缩小浏览器时 网站
  • 如何使用 LINQ 编写 ContainsAll 查询? (C# LINQ-TO-SQL)[重复]

    这个问题在这里已经有答案了 假设我有以下内容 var mustHave new int 1 2 和一个名为 db Numbers 的表 public class Number public int id public int number
  • Powershell - Write-Host 在错误的位置打印

    我的代码具有以下功能 function status if args 0 eq Stopped Write Host NoNewline Stopped fore red 该函数用作 Write Host count i DisplayNa
  • java - 将多个列表背靠背写入单个 JsonArray 的最佳方法

    我的问题是将多个列表背靠背转换为单个 JsonArray 的最佳方法是什么 列表是动态出现的 所以我不想或不能将所有列表 list1 listn 合并到一个大列表中 然后使用 Jackson 将合并的列表写入 JsonArray Conve
  • 无法找到构建工具修订版 29.0.2 - Android Studio [重复]

    这个问题在这里已经有答案了 最近我将android studio更新到最新版本4 0后遇到了这个问题 我最近解决了这个问题 打开Android Studio 点击File gt Settings gt Appearance Behaviou
  • 包含具有特征参数的结构的框的大小

    我需要一个包含特征对象及其自身的结构 令人失望的是 以下代码无法编译 trait Foo struct Bar