Guest User

Untitled

a guest
Nov 16th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.50 KB | None | 0 0
  1. use std::mem::size_of;
  2.  
  3. pub fn closure_to_ffi<F: Fn(i32, i32) -> i32>(f: F) -> (*mut F, unsafe extern "C" fn(*mut F, i32, i32) -> i32) {
  4. unsafe extern "C" fn call_closure_from_ffi<F: Fn(i32, i32) -> i32>(f: *mut F, a: i32, b: i32) -> i32 {
  5. println!("size of `*mut F`: {} bytes", size_of::<*mut F>());
  6. (*f)(a, b)
  7. }
  8. (Box::into_raw(Box::new(f)), call_closure_from_ffi::<F>)
  9. }
  10.  
  11. pub fn main() {
  12. let (f0, f1) = closure_to_ffi(|x, y| x + y);
  13.  
  14. unsafe {
  15. f1(f0, 1, 2);
  16. }
  17. }
Add Comment
Please, Sign In to add comment