Generics

https://doc.rust-lang.org/book/generics.html

T(型)を指定する事で、色々と使えるテンプレート機能。 <T>を明示的に指定せずとも、使えるのがスゴい。

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

impl<T> Point<T> {
    fn swap(&mut self) {
        std::mem::swap(&mut self.x, &mut self.y);
    }
}

fn main() {
    let mut int_point = Point { x: 3, y: 2 };
    let mut float_point = Point { x: 0.3, y: 0.2 };
    // let mut error_point = Point { x: 3, y: 0.2 }; // xが整数なのに、yが小数で型が違うため、エラーになる。

    println!("({}, {})", int_point.x, int_point.y);
    int_point.swap();
    println!("({}, {})", int_point.x, int_point.y);

    println!("({}, {})", float_point.x, float_point.y);
    float_point.swap();
    println!("({}, {})", float_point.x, float_point.y);
}