summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/core/c++/raii_guard.hpp26
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)};
+}
+}