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

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条回答 默认 最新

  • 有问必答小助手 2022-02-14 14:33
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)