Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Defer<'a, F>
- where F: FnOnce() + 'a
- {
- f: Option<F>,
- _t: ::std::marker::PhantomData<&'a F>,
- }
- impl <'a, F> Drop for Defer<'a, F>
- where F: FnOnce() + 'a
- {
- fn drop(&mut self) {
- if let Some(f) = self.f.take() {
- (f)();
- }
- }
- }
- macro_rules! defer {
- ($func:block) => {
- let _defer = Defer {
- f: Some(|| $func),
- _t: ::std::marker::PhantomData,
- };
- }
- }
- fn main() {
- defer!({println!("End!")});
- println!("Running")
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement