Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.73 KB | None | 0 0
  1. trait A {
  2. fn get_a(&self) -> u32;
  3. }
  4.  
  5. trait B<'a, 'b> {
  6. fn get_b(&'a self) -> &'b u32;
  7. }
  8.  
  9. trait Common<'a, T> {
  10. fn get(&'a self) -> T;
  11. }
  12.  
  13. struct SA {
  14. val : u32
  15. }
  16.  
  17. impl A for SA {
  18. fn get_a(&self) -> u32 {
  19. self.val
  20. }
  21. }
  22.  
  23. struct SB<'b> {
  24. val : &'b u32
  25. }
  26.  
  27. impl<'a, 'b> B<'a, 'b> for SB<'b> {
  28. fn get_b(&'a self) -> &'b u32 {
  29. self.val
  30. }
  31. }
  32.  
  33. impl<'a, T> Common<'a, u32> for T where T: A {
  34. fn get(&'a self) -> u32 {
  35. self.get_a()
  36. }
  37. }
  38.  
  39. impl<'a, 'b, T> Common<'a, &'b u32> for T where T: B<'a, 'b> {
  40. fn get(&'a self) -> &'b u32 {
  41. self.get_b()
  42. }
  43. }
  44.  
  45. fn main() {
  46. let a = SA { val: 42 };
  47. let b = SB { val: &13 };
  48.  
  49. println!("{}", a.get());
  50. println!("{}", b.get());
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement