假设我们有两个具有相同字段(和类型)的结构。
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)
但这是不可能的,因为类型不同。是否有任何宏或语法可以对所有相同字段进行简单移动?
如果您确定结构内存布局相同,您可以使用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)
| 归档时间: |
|
| 查看次数: |
2820 次 |
| 最近记录: |