Rust——结构体泛型
结构体泛型
#[derive(Debug)] struct Color{ //定义泛型数组Color chanel1:T, chanel2:T, chanel3:T, } //泛型结构体关联函数 impl Color { fn create(chanel1:T,chanel2:T,chanel3:T)->Color { Color{ chanel1,chanel2,chanel3 } } } fn main(){ //定义浮点型颜色通道坐标值0.0-255.0 let f_color = Color::create(0f32,0f32,0f32); println!("浮点型表示颜色三通道值 {:#?}",f_color); let hex_color = Color::create(0x10,0x10,0x10); println!("整型表示颜色三通道值 {:#?}",hex_color); }
运行结果:
若将以上代码中一句更改如下:
let f_color = Color::create(0f32,0f32,0f64);
运行后报错如下:
以上报错的原因是因为三个通道的值类型要一致(第3通道值为f64,前两个通道值为f32)
若要定义的三个通道的值可以取不同数据类型,可如下操作:
#[derive(Debug)] struct Colors{ chanel1:C1, chanel2:C2, chanel3:C3, } impl Colors { fn create(chanel1:C1,chanel2:C2,chanel3:C3)->Colors { Colors{ chanel1,chanel2,chanel3 } } } #[derive(Debug)] struct Color { //定义泛型数组Color,带入参数需同种数据类型 chanel1:T, chanel2:T, chanel3:T, } //泛型结构体关联函数 impl Color { fn create(chanel1:T,chanel2:T,chanel3:T)->Color { Color{ chanel1,chanel2,chanel3 } } } fn main(){ //定义浮点型颜色通道坐标值0.0-255.0 let f_color = Color::create(0f32,0f32,0f32); println!("浮点型表示颜色三通道值 {:#?}",f_color); let hex_color = Color::create(0x10,0x10,0x10); println!("整型表示颜色三通道值 {:#?}",hex_color); let varis_color = Colors::create(12u32,0f32,90i32); println!("多数据类型表示颜色三通道{:#?}",varis_color); }
运行后结果如下: