Guest User

Untitled

a guest
Nov 15th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.57 KB | None | 0 0
  1. #include <utility>
  2. #include <iostream>
  3. #include <exception>
  4.  
  5. template <typename Functor>
  6. class Defer {
  7. public:
  8. Defer(Functor&& functor) : functor_(std::forward<Functor>(functor)) {}
  9. Defer(const Defer&) = delete;
  10. Defer(Defer&&) = delete;
  11.  
  12. ~Defer() {
  13. try {
  14. functor_();
  15. } catch (...) {
  16. std::cerr << "DO NOT throw exception in defer function" << std::endl;
  17. std::terminate();
  18. }
  19. }
  20. private:
  21. Functor functor_;
  22. };
  23.  
  24. template <typename Functor>
  25. Defer<Functor> make_defer(Functor&& functor) {
  26. return Defer<Functor>(std::forward<Functor>(functor));
  27. }
Add Comment
Please, Sign In to add comment