Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn make_wrapper<F, Arg>(f: F) -> Box<dyn Fn(&i32)>
- where
- Arg: for<'a> CreateFromI32Ref<'a>,
- F: Fn(Arg) + 'static
- {
- Box::new(move |i32_ref: &i32| {
- f(Arg::create_from_i32_ref(i32_ref))
- })
- }
- trait CreateFromI32Ref<'a>: 'a {
- fn create_from_i32_ref(i32_ref: &'a i32) -> Self;
- }
- impl<'a> CreateFromI32Ref<'a> for i32 {
- fn create_from_i32_ref(i32_ref: &'a i32) -> i32 {
- *i32_ref
- }
- }
- impl<'a: 'b, 'b: 'a> CreateFromI32Ref<'a> for &'b i32 {
- fn create_from_i32_ref(i32_ref: &'a i32) -> &'b i32 {
- i32_ref
- }
- }
- fn main() {
- fn wrappee(arg: i32) { println!("{}", arg) }
- make_wrapper(wrappee)(&100i32);
- fn wrappee2(arg: &i32) { println!("{}", *arg) }
- make_wrapper(wrappee2)(&200i32);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement