Guest User

Untitled

a guest
May 24th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.77 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<f32, f32, f32> for Adder {
  17. fn overloaded_fn(&self, tee: f32, yu: f32) -> f32 {
  18. println!("<f32>");
  19. tee + yu
  20. }
  21. }
  22.  
  23. impl OverloadedFn<f64, f64, f64> for Adder {
  24. fn overloaded_fn(&self, tee: f64, yu: f64) -> f64 {
  25. println!("<f64>");
  26. tee + yu
  27. }
  28. }
  29.  
  30. use std::f32;
  31.  
  32. fn main() {
  33. let a = Adder.add(f32::MAX, 1.0);
  34. println!("a: {}", a);
  35. }
Add Comment
Please, Sign In to add comment