在 Rust 中复制不同结构的相同字段
Copy identical fields of different struct in rust
假设我们有两个具有相同字段(和类型)的结构。
struct A {
pub data1: i32;
pub data2: string;
}
struct B {
pub data1: i32;
pub data2: string;
}
要复制结构 A 和 B,我必须这样做
fn convert_A_to_B(a: A) -> B {
B {
data1: a.data1,
data2: a.data2
}
}
我希望我能做类似的事情
B {
..a
}
但由于类型不同,这是不可能的。是否有任何宏或语法可以简单地移动所有相同的字段?
如果您确定结构内存布局相同,您可以使用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:?}");
}
假设我们有两个具有相同字段(和类型)的结构。
struct A {
pub data1: i32;
pub data2: string;
}
struct B {
pub data1: i32;
pub data2: string;
}
要复制结构 A 和 B,我必须这样做
fn convert_A_to_B(a: A) -> B {
B {
data1: a.data1,
data2: a.data2
}
}
我希望我能做类似的事情
B {
..a
}
但由于类型不同,这是不可能的。是否有任何宏或语法可以简单地移动所有相同的字段?
如果您确定结构内存布局相同,您可以使用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:?}");
}