ActiveLib
Loading...
Searching...
No Matches
Defer.h
1
6#ifndef ACTIVE_UTILITY_DEFER
7#define ACTIVE_UTILITY_DEFER
8
9#include <functional>
10#include <utility>
11
12namespace active::utility {
13
15
41 class Defer {
42 public:
43
45 using Action = std::function<void()>;
46
51 Defer(const Action& action) : m_action{action} {}
56 Defer(Action&& action) : m_action(std::move(action)) {}
61 Defer(Defer&& source) {
62 m_action = std::exchange(source.m_action, nullptr);
63 }
64 Defer(const Defer&) = delete; //No copy constructor
65 Defer& operator=(const Defer&) = delete; //No assignment operator
70 if (m_action)
71 m_action(); //Execute the deferred action when destroyed
72 }
73
74 private:
76 Action m_action;
77 };
78
79
83 inline Defer defer(Defer::Action&& action) {
84 return Defer{action};
85 }
86
87}
88
89#endif //ACTIVE_UTILITY_DEFER
A class to hold an action to be deferred until its scope is exited.
Definition Defer.h:41
Defer(Defer &&source)
Definition Defer.h:61
Defer(const Action &action)
Definition Defer.h:51
Defer(Action &&action)
Definition Defer.h:56
~Defer()
Definition Defer.h:69
std::function< void()> Action
Deferred action function.
Definition Defer.h:45
Definition Base64Transport.h:11
Defer defer(Defer::Action &&action)
Definition Defer.h:83