Guest User

Untitled

a guest
May 24th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.83 KB | None | 0 0
  1. // Trait defines the overloaded method
  2. trait OverloadedFn<T, U, O> {
  3. fn overloaded_fn(&self, tee: T, yu: U) -> O;
  4. }
  5.  
  6. // Struct to use with the overload
  7. struct Adder;
  8. impl Adder {
  9. // Convenience helper to hide the trait boilerplate from the user
  10. fn add<T, U, O>(&self, tee: T, yu: U) -> O
  11. where Self: OverloadedFn<T, U, O> {
  12. self.overloaded_fn(tee, yu)
  13. }
  14. }
  15.  
  16. impl OverloadedFn<i32, i32, i32> for Adder {
  17. fn overloaded_fn(&self, tee: i32, yu: i32) -> i32 {
  18. tee + yu
  19. }
  20. }
  21.  
  22. impl OverloadedFn<i32, f32, f32> for Adder {
  23. fn overloaded_fn(&self, tee: i32, yu: f32) -> f32 {
  24. tee as f32 + yu
  25. }
  26. }
  27.  
  28. fn main() {
  29. let a = Adder.add(42, 3);
  30. let b = Adder.add(42, 3.14);
  31. println!("a: {}", a);
  32. println!("b: {}", b);
  33. }
Add Comment
Please, Sign In to add comment