m0_63142202 2022-02-13 13:55 采纳率: 0%
浏览 8
已结题

rust关于结构体的问题

‍‍现在有两个结构体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的方式,但是我不知到怎么从返回值中获取到结构体本身

  • 写回答

1条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 2月21日
      • 创建了问题 2月13日

      悬赏问题

      • ¥15 刚入职被要求写这种文档,应该如何下手
      • ¥15 最优经济尺寸设计问题
      • ¥15 从多元正态分布中生成3维样本
      • ¥15 GEO下载数据的处理报错 :函数‘Meta’标签‘"data.frame"’找不到继承方法,如何解决?
      • ¥15 android object box 一个实体多个表怎么写
      • ¥15 temux 启用docker 服务失败
      • ¥15 Flask 使用celery发送邮件出现‘目标计算机积极拒绝‘
      • ¥60 老人用的sd卡在手机里面不知道操作了什么,导致图片和视频变成了文件,取下sd卡连接电脑就是图中的样子,后缀改为.jpg才可以,需要用系统的画图软件才能打开,文件属性还是文件,有没有批量操作的解决办法
      • ¥15 超时跳出方法代码的返回值问题
      • ¥15 汇编语言程序设计设计,ascii码求数,再求数的BCD码