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
Tis specified twice inimpl<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> { .. }.Pointis still generic and you can usePoint<f64>, but methods in this block will only be available forPoint<u32>.
