제네릭 메서드

impl 블록에서도 제네릭 타입을 선언할 수 있습니다:

#[derive(Debug)]
struct Point<T>(T, T);

impl<T> Point<T> {
    fn x(&self) -> &T {
        &self.0  // + 10
    }

    // fn set_x(&mut self, x: T)
}

fn main() {
    let p = Point(5, 10);
    println!("p.x = {}", p.x());
}
  • 질문: impl<T> Point<T> {}에서 T가 왜 두 번 사용됩니까?
    • 제네릭 타입에 대한 제네릭 구현 이기 때문입니다. 이 두 제네릭은 서로 독립적입니다.
    • 이는 임의의 모든 T에 대해서 이 메소드들이 정의된다는 것을 의미합니다.
    • impl Point<u32> { .. }와 같이 작성하는 것도 가능합니다.
      • Point는 여전히 제네릭이며 Point<f64>를 사용할 수도 있지만 이 블록의 메서드는 Point<u32>만 쓸 수 있습니다.