gpt4 book ai didi

rust - 如何在保持对特征对象的引用的同时具有特征对象的向量

转载 作者:行者123 更新时间:2023-12-03 11:46:30 24 4
gpt4 key购买 nike

我有一个Vec ,id喜欢将所有小部件存储在此处以进行渲染,但id也喜欢保留对某些小部件的引用。当我将小部件插入矢量时,它们将被移动,并且当我尝试引用它们时,借阅检查器会提示。我该如何解决?

最佳答案

您在这里看到的问题是,在没有引用的情况下,您无法对向量进行突变。这是一个很好的 guard ,因为它可能导致悬挂引用。
有几种方法可以解决此问题,第一种是使用RcArc进行引用计数。如果您正在进行虚拟调用,这会将您的 bootstrap 更改为Vec<Rc/Arc<WidgetType>>Vec<Rc/Arc<&dyn WidgetTrait>>。然后,您无需克隆引用计数器,而是克隆引用计数器。可以相对轻松地完成此操作,但缺点是添加了指针间接寻址,即使将这些项目从渲染队列中删除,这些项目仍然可以存在。
下一个选项是将索引/键存储到渲染列表中。这可以通过在评论中用@trentcl表示的usize上的Vec或带有HashMap的arbitray键来完成。在向量或带有哈希表的大量哈希的情况下,这具有索引移动的缺点。
我认为最好的选择是需要一个图书馆,但要涵盖所有其他缺点。该库是slotmap。这将创建一个带有矢量背景的 map ,该 map 可返回可用来替换引用的键。其中有一些关于如何存储数据以及要优化哪些操作的选项,但是所有这些都可以在文档中看到。这样做的主要问题是,您必须添加一个依赖项,这可能取决于您的特定情况而不是可取的。

关于rust - 如何在保持对特征对象的引用的同时具有特征对象的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66408323/

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