【发布时间】:2021-08-17 22:54:02
【问题描述】:
是否有可能有一个返回任何特征对象的特征函数?
或者,泛型参数可以是特征对象类型吗?
trait ToVec<T> {
fn to_vec(&self) -> Vec<&dyn T>;
}
trait TraitA {}
trait TraitB {}
// etc
【问题讨论】:
标签: rust
是否有可能有一个返回任何特征对象的特征函数?
或者,泛型参数可以是特征对象类型吗?
trait ToVec<T> {
fn to_vec(&self) -> Vec<&dyn T>;
}
trait TraitA {}
trait TraitB {}
// etc
【问题讨论】:
标签: rust
你不能拥有&dyn T,因为T 不是特征。但是&dyn ToVec<T>(或&dyn SomeOtherTrait)没问题。
在您的操场示例中,Vec<T> 实际上是正确的,因为您在 impls 中已经将 T 作为特征对象 &dyn TraitA;但正如错误消息所说,您需要修复生命周期。例如。 this compiles
trait TraitA {}
trait ToVec<T> {
fn to_vec(&self) -> Vec<T>;
}
impl<'a, T: TraitA> ToVec<&'a dyn TraitA> for (&'a str, &'a T) {
fn to_vec(&self) -> Vec<&'a dyn TraitA> {
vec![
self.1 as &dyn TraitA
]
}
}
但可能是也可能不是你想要的。
【讨论】: