Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::os::raw::c_void;
- extern {
- // context, data
- fn on_thing_happens(callback: extern fn(*const c_void, u32));
- }
- fn register<F: Fn(u32)>(f: F) {
- extern fn handler<F: Fn(u32)>(f_ptr: *const c_void, val: u32) {
- let f = unsafe { &*(f_ptr as *const F) };
- f(val)
- }
- unsafe {
- on_thing_happens(handler::<F>);
- }
- }
- fn main() {
- fn foo(a: u32) {
- println!("{}", a);
- }
- register(foo);
- }
Add Comment
Please, Sign In to add comment