Guest User

Untitled

a guest
Jul 19th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.78 KB | None | 0 0
  1. use std::marker::PhantomData;
  2. use std::os::raw::c_void;
  3. use std::mem::transmute;
  4.  
  5. struct Rute<'a> {
  6. _marker: PhantomData<&'a u32>,
  7. }
  8.  
  9. #[derive(Copy, Clone)]
  10. struct Widget<'a> {
  11. _marker: PhantomData<&'a u32>,
  12. }
  13.  
  14. impl<'a> Widget<'a> {
  15. pub fn on_change<T>(&mut self, data: &'a mut T) -> &mut Widget<'a>
  16. where T: 'a,
  17. {
  18. unsafe {
  19. let user_data: *const c_void = transmute(data);
  20. println!("{:?}", user_data)
  21. }
  22.  
  23. self
  24. }
  25. }
  26.  
  27. impl<'a> Rute<'a> {
  28. pub fn create_widget(&'a mut self) -> Widget<'a> {
  29. Widget { _marker: PhantomData }
  30. }
  31. }
  32.  
  33. fn main() {
  34. let mut rute = Rute { _marker: PhantomData };
  35. let mut foo = 1;
  36.  
  37. {
  38. rute.create_widget().on_change(&mut foo);
  39. //rute.on_change(&mut foo);
  40. }
  41. }
Add Comment
Please, Sign In to add comment