제네릭 메서드
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>
만 쓸 수 있습니다.