TL; DR如何在引用共享底层数据的泛型类型上构建数据结构?
这个问题是关于Rust的语义和良好的数据建模.下面的代码是对我的问题的一个(更多)微不足道的提炼,以突出我的具体问题,而不是我的实际代码.
目标是创建一个函数来构建几个包含对泛型类型的共享数据的引用的向量.在以下示例的命名法中,我希望能够返回一个可以存储Struct1's和Struct2'(由特征抽象Trait)的向量集合,但是因为(在我的实际代码中)Struct1并且Struct2相对较大并且将被存储相对频繁地在相对较多的地方,我宁愿存储对共享数据的引用,而不是将它们全部复制到一起.
我面临的当前问题(并且有许多中间修订)是:
Trait,这不是Sized我需要存储在我的向量引用&引用,因此需要引用build_vectors功能的范围.
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()
} …rust ×1