Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.51 KB | None | 0 0
  1. struct Defer<'a, F>
  2. where F: FnOnce() + 'a
  3. {
  4. f: Option<F>,
  5. _t: ::std::marker::PhantomData<&'a F>,
  6. }
  7.  
  8. impl <'a, F> Drop for Defer<'a, F>
  9. where F: FnOnce() + 'a
  10. {
  11. fn drop(&mut self) {
  12. if let Some(f) = self.f.take() {
  13. (f)();
  14. }
  15. }
  16. }
  17.  
  18. macro_rules! defer {
  19. ($func:block) => {
  20. let _defer = Defer {
  21. f: Some(|| $func),
  22. _t: ::std::marker::PhantomData,
  23. };
  24. }
  25. }
  26. fn main() {
  27. defer!({println!("End!")});
  28.  
  29. println!("Running")
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement