Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.67 KB | None | 0 0
  1. fn make_closure<'a, T>() -> Box<dyn Fn(&'a i32)>
  2. where
  3. T: std::fmt::Debug + CreateFromI32Ref<'a>
  4. {
  5. Box::new(move |i32_ref: &i32| {
  6. T::create_from_i32_ref(i32_ref).process()
  7. })
  8. }
  9.  
  10. trait CreateFromI32Ref<'a>: Sized {
  11. fn create_from_i32_ref(i32_ref: &'a i32) -> Self;
  12. fn process(self) {
  13. println!("processing...")
  14. }
  15. }
  16.  
  17. impl<'a> CreateFromI32Ref<'a> for i32 {
  18. fn create_from_i32_ref(i32_ref: &'a i32) -> i32 {
  19. *i32_ref
  20. }
  21. }
  22.  
  23. impl<'a> CreateFromI32Ref<'a> for &'a i32 {
  24. fn create_from_i32_ref(i32_ref: &'a i32) -> &'a i32 {
  25. i32_ref
  26. }
  27. }
  28.  
  29. fn main() {
  30. make_closure::<i32>()(&100i32);
  31. make_closure::<&i32>()(&100i32);
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement