Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn make_closure<'a, T>() -> Box<dyn Fn(&'a i32)>
- where
- T: std::fmt::Debug + CreateFromI32Ref<'a>
- {
- Box::new(move |i32_ref: &i32| {
- T::create_from_i32_ref(i32_ref).process()
- })
- }
- trait CreateFromI32Ref<'a>: Sized {
- fn create_from_i32_ref(i32_ref: &'a i32) -> Self;
- fn process(self) {
- println!("processing...")
- }
- }
- impl<'a> CreateFromI32Ref<'a> for i32 {
- fn create_from_i32_ref(i32_ref: &'a i32) -> i32 {
- *i32_ref
- }
- }
- impl<'a> CreateFromI32Ref<'a> for &'a i32 {
- fn create_from_i32_ref(i32_ref: &'a i32) -> &'a i32 {
- i32_ref
- }
- }
- fn main() {
- make_closure::<i32>()(&100i32);
- make_closure::<&i32>()(&100i32);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement