在 Rust 中复制不同结构的相同字段

Jae*_*bum 6 rust

假设我们有两个具有相同字段(和类型)的结构。

struct A {
  pub data1: i32;
  pub data2: string;
}

struct B {
  pub data1: i32;
  pub data2: string;
}
Run Code Online (Sandbox Code Playgroud)

要复制结构 A 和 B,我必须这样做

fn convert_A_to_B(a: A) -> B {
  B {
    data1: a.data1,
    data2: a.data2
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望我能做类似的事情

B {
  ..a
}
Run Code Online (Sandbox Code Playgroud)

但这是不可能的,因为类型不同。是否有任何宏或语法可以对所有相同字段进行简单移动?

Net*_*ave 2

如果您确定结构内存布局相同,您可以使用std::mem::transmute

#[repr(C)]
#[derive(Debug)]
struct A {
  pub data1: i32,
  pub data2: String
}

#[repr(C)]
struct B {
  pub data1: i32,
  pub data2: String
}

impl From<B> for A {
    fn from(b: B) -> A {
        unsafe { std::mem::transmute(b) }
    }
}

fn main() {
    let b = B {data1: 10, data2: "Foo".to_string()};
    let a: A = b.into();
    
    println!("{a:?}");
}
Run Code Online (Sandbox Code Playgroud)

操场