我有两个结构体A和B,它们非常相似。我试图将A和B都转换为另一个类型C。A、B和C的定义如下所示。
pub struct A {
pub a: i32,
}
pub struct B {
pub a: i32,
}
pub struct C {
pub b: i32,
}
我的实现转换从A到C如下所示:-
impl From<A> for C {
fn from(a: A) -> C {
C {b: a.a}
}
}
由于A和B都是相似的,为了将B转换为C,目前我有一个上面定义的From
的重复实现。
我正在寻找一种方法,使From
实现通用,并且仅限于使用A和B。我的实现如下:
trait Types {}
impl Types for A {}
impl Types for B {}
impl<T: Types> From<T> for C where T: Types {
fn from(entity: T) -> C {
C { b: entity.a }
}
}
但是当我用上面的代码编译一个程序时,我得到了下面的错误,
error[E0609]: no field `a` on type `T`
|
27 | impl<T: Types> From<T> for C where T: Types {
| - type parameter 'T' declared here
我想知道解决这个错误的方法,因为我别无选择,只能保留A和B并避免代码重复。
1条答案
按热度按时间bzzcjhmw1#
通常这是由宏来完成的: