Generics 如何将特征对象传递给向量,该向量在向量的向量中也具有统一类型?
这真的很难简明扼要地解释。但我想要的是一个结构,它有一个Vec“a”字段,其中包含一个线程向量,另一个Vec“B”位于Vec“a”内。Vec“A”同时持有Vec“B”和线程句柄。Vec“B”有一个统一的类型,不需要trait对象,但是Vec“a”使用trait对象保存多个不同类型的Vec“B”。基本上,我不想将trait对象用于Vec“B”,而是将trait对象用于Vec“A” 我试图实现上述功能,但并不总是感觉正确和错误。是否有任何实际的实施或任何直接的解决方法 我确实试过搜索它,但我觉得如果不给谷歌写一小段话,我就不能简明扼要地说出来 下面是我认为应该是这样的(伪)代码:Generics 如何将特征对象传递给向量,该向量在向量的向量中也具有统一类型?,generics,vector,rust,traits,trait-objects,Generics,Vector,Rust,Traits,Trait Objects,这真的很难简明扼要地解释。但我想要的是一个结构,它有一个Vec“a”字段,其中包含一个线程向量,另一个Vec“B”位于Vec“a”内。Vec“A”同时持有Vec“B”和线程句柄。Vec“B”有一个统一的类型,不需要trait对象,但是Vec“a”使用trait对象保存多个不同类型的Vec“B”。基本上,我不想将trait对象用于Vec“B”,而是将trait对象用于Vec“A” 我试图实现上述功能,但并不总是感觉正确和错误。是否有任何实际的实施或任何直接的解决方法 我确实试过搜索它,但我觉得如果
trait标记{}
u32{}的impl标记
i64{}的impl标记
//向量“B”
输入InnerVec=Vec;
结构线程池{
//Vec“A”
线程:Vec,
}
首先,类型别名不是新类型。它更像是一个查找和替换系统,用于帮助处理长类型名称(例如:typefoo=FooSys;
)。我怀疑它是否会允许您添加额外的类型约束
至于您的问题,对伪代码最直接的工作解释是将生存期添加到线程池中
trait标记{}
u32{}的impl标记
i64{}的impl标记
结构线程池>)>,
}
然而,我假设您真正想知道的是如何存储包含非动态项的动态Vec的Vec。为此,您可以使用Any
并将其向下转换为所需的类型。您可以在中找到有关它的更多信息
使用std::any::any;
结构线程池{
线程:Vec,
}
impl线程池{
pub fn get_tagsI很喜欢你使用Any的方式,但是你认为向下播放Any
会对性能产生任何重大影响吗?我怀疑你会看到对性能的任何影响。我能想到的唯一开销是检查你请求的类型实际上是给定的类型。但是几乎每种语言都有这样的影响,所以我不会担心在这种情况下,我会避免添加额外的微优化,但如果你真的想,总是有不安全的代码选项,只需将指针转换为你想要的任何东西。unsafe{Some(&*(self as*const dyn Any as*const T))}