diff options
| -rw-r--r-- | modules/core/c++/raii_guard.hpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/modules/core/c++/raii_guard.hpp b/modules/core/c++/raii_guard.hpp new file mode 100644 index 0000000..fe17781 --- /dev/null +++ b/modules/core/c++/raii_guard.hpp @@ -0,0 +1,26 @@ +#pragma once + +namespace saw { +template<typename Constr, typename Destr> +class raii_guard { +private: + Constr constr_; + Destr destr_; +public: + raii_guard(Constr&& constr__, Destr&& destr__): + constr_{std::move(constr__)}, + destr_{std::move(destr__)} + { + constr_(); + } + + ~raii_guard(){ + destr()_; + } +}; + +template<typename Constr, typename Destr> +raii_guard<Constr,Destr> make_raii_guard(Constr&& constr, Destr&& destr){ + return {std::move(constr),std::move(destr)}; +} +} |
