现在有两个结构体A和B,它们的成员基本相同,只有少量不同,例如
struct A
{
val: u32,
}
struct B
{
val: u64,
}
其他相同部分省略了
实现了一个trait
trait Trait
{
fn new() -> Self;
}
impl Trait for A
{
fn new() -> A
{
//返回初始化的A
}
}
impl Trait for B
{
fn new() -> B
{
//返回初始化的B
}
}
因为A和B基本一致,所以我打算用trait实现它们共有的方法
但是每次我会通过一些判断来判断我是创建A还是B结构体,并且每次只会创建其中的一种
于是我打算这么写
let my_struct = match condiction
{
true => A::new(),
false => B::new(),
}
但是这是错误的,编译器大概说my_struct的类型已经由true => A::new()推断成A了,就不能在用false => B::new()将my_struct变为B。
如果我想实现我希望的功能那要怎么改?
之前我使用过返回Box的方式,但是我不知到怎么从返回值中获取到结构体本身