相关疑难解决方法(0)

通用类型,所有权和持久数据结构

TL; DR如何在引用共享底层数据的泛型类型上构建数据结构?

这个问题是关于Rust的语义和良好的数据建模.下面的代码是对我的问题的一个(更多)微不足道的提炼,以突出我的具体问题,而不是我的实际代码.

目标是创建一个函数来构建几个包含对泛型类型的共享数据的引用的向量.在以下示例的命名法中,我希望能够返回一个可以存储Struct1's和Struct2'(由特征抽象Trait)的向量集合,但是因为(在我的实际代码中)Struct1并且Struct2相对较大并且将被存储相对频繁地在相对较多的地方,我宁愿存储对共享数据的引用,而不是将它们全部复制到一起.

我面临的当前问题(并且有许多中间修订)是:

  1. 由于数据的类型我想存储的Trait,这不是Sized我需要存储在我的向量引用
  2. 由于每个结构都将从多个向量&引用,因此需要引用
  3. 从哲学上讲,给定结构没有单一的"所有者",因此没有"正确"的地方来粘贴我的结构,因此它们不会超出build_vectors功能的范围.
    1. 我考虑过试图通过Traits我可以指向引用的全局向量来解决这个问题,不幸的是上面的问题(1)似乎排除了这个策略.

.

struct Struct1;
struct Struct2;

trait Trait { fn name(&self) -> &str; }
impl Trait for Struct1 { fn name(&self) -> &str { "Struct1" } }
impl Trait for Struct2 { fn name(&self) -> &str { "Struct2" } }

fn shallow_copy<'a>(v: &'a Vec<&'a Box<Trait>>) -> Vec<&'a Box<Trait>> {
   v.iter().map(|x|*x).collect()
} …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
1
解决办法
183
查看次数

标签 统计

rust ×1