Generic Methods

You can declare a generic type on your impl block:

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

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

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

12. fn main() {
13. let p = Point(5, 10);
14. println!("p.x = {}", p.x());
15. }
  • Q: Why T is specified twice in impl<T> Point<T> {}? Isn’t that redundant?
  • This is because it is a generic implementation section for generic type. They are independently generic.
  • It means these methods are defined for any T.
  • It is possible to write impl Point<u32> { .. }.
    • Point is still generic and you can use Point<f64>, but methods in this block will only be available for Point<u32>.