【发布时间】:2021-04-30 05:05:00
【问题描述】:
StructA 实现 From<StructB>,StructB 实现 From<S>。
我一般如何实现“快捷方式”Into<StructA> for S 或 From<S> for StructA?
如果这是一个坏主意,请告诉我。但是为了学习,请解释一下如何做。
这是我的尝试:
struct StructA {
f: StructB
}
struct StructB {
g: i32
}
impl From<StructB> for StructA {
fn from(v: StructB) -> Self {
Self {
f: v
}
}
}
impl From<i32> for StructB {
fn from(v: i32) -> Self {
Self {
g: v
}
}
}
impl<T: Into<StructA>, S: Into<T>> Into<StructA> for S {
fn into(self) -> StructA {
let i: T = self.into();
i.into()
}
}
我得到的错误是the type parameter 'T' is not constrained by the impl trait, self type, or predicates。
我不明白。 T 不是受Into<StructA> 约束吗?
【问题讨论】:
-
这是个坏主意,因为它破坏了 impl 的唯一性。例如,您可以引入另一种类型
T0 : Into<StructA>, S: Into<T0>,现在您的一揽子快捷方式实现是模棱两可的。您可以通过关联类型实现类似的效果。
标签: generics rust polymorphism traits parametric-polymorphism