Rust学习笔记_15——Union

// 这里定义了一个 union,名为 MyUnion,它可以在同一个内存位置存储一个 i32、一个 f32 或一个由4个 u8 组成的数组。 // #[repr(C)] 属性确保 union 的布局与C语言中的 union 布局一致。 #[repr(C)] union MyUnion { i: i32, f: f32, s: [u8; 4], } // 这个枚举用于跟踪 union 中当前存储的数据类型。每个变体都包含与 union 中相应字段相同类型的值。 #[derive(Debug)] enum MyUnionState { Int(i32), Float(f32), Bytes([u8; 4]), } // 结构体 MyStruct 包含两个字段:data(MyUnion 类型)和 state(MyUnionState 类型)。 // data 字段用于存储实际的数据 // state 字段用于跟踪当前存储的数据类型。 struct MyStruct { data: MyUnion, state: MyUnionState, } // 为 MyStruct 实现了两个构造函数:new_int 和 new_float。 // 这些函数分别用于创建包含 i32 和 f32 值的 MyStruct 实例。 impl MyStruct { fn new_int(value: i32) -> Self { MyStruct { data: MyUnion { i: value }, state: MyUnionState::Int(value), } } fn new_float(value: f32) -> Self { MyStruct { data: MyUnion { f: value }, state: MyUnionState::Float(value), } } fn value_int(&self) -> Option<i32> { if let MyUnionState::Int(value) = &self.state { Some(unsafe { self.data.i }) } else { None } } fn value_float(&self) -> Option<f32> { if let MyUnionState::Float(value) = &self.state { Some(unsafe { self.data.f }) } else { None } } } fn main() { let int_val = MyStruct::new_int(42); let float_val = MyStruct::new_float(3.14); println!("Int value: {:?}", int_val.value_int()); println!("Float value: {:?}", float_val.value_float()); }
上一篇:算法基础学习Day5(双指针、动态窗口)-2.题目解答


下一篇:人工智能大模型LLM开源资源汇总(持续更新)