Z
ZHANK
泛型与 Trait

泛型

泛型函数/结构体/枚举、单态化、性能特性

泛型

Rust 泛型在编译时单态化(Monomorphization)——为每个具体类型生成专用代码,零运行时开销。

学完本章你将: 掌握泛型函数/结构体/枚举、单态化、性能。


泛型函数

rust
fn largest<T: PartialOrd>(list: &[T]) -> &T {
    let mut largest = &list[0];
    for item in list {
        if item > largest {
            largest = item;
        }
    }
    largest
}

fn main() {
    let nums = vec![34, 50, 25, 100, 65];
    println!("{}", largest(&nums));  // 100

    let chars = vec!['y', 'm', 'a', 'q'];
    println!("{}", largest(&chars)); // 'y'
}

泛型结构体

rust
struct Point<T> {
    x: T,
    y: T,
}

// 泛型方法
impl<T> Point<T> {
    fn x(&self) -> &T { &self.x }
}

// 只为特定类型实现方法
impl Point<f64> {
    fn distance_from_origin(&self) -> f64 {
        (self.x.powi(2) + self.y.powi(2)).sqrt()
    }
}

fn main() {
    let p1 = Point { x: 5, y: 10 };
    let p2 = Point { x: 1.0, y: 4.0 };

    println!("{}", p1.x());             // 5
    println!("{:.2}", p2.distance_from_origin());
}

单态化

rust
// 你写的:
let integer = Some(5);
let float = Some(5.0);

// 编译器生成的(简化版):
// enum Option_i32 { Some(i32), None }
// enum Option_f64 { Some(f64), None }
// 每种类型都生成独立代码——零运行时开销