rntviewer/src/defer.hpp

16 lines
423 B
C++
Raw Normal View History

2024-07-12 07:53:01 +00:00
template <typename F>
2024-07-10 15:04:11 +00:00
struct Defer_Guard {
Defer_Guard(F && f) : _f(f) {}
~Defer_Guard() { _f(); }
2024-07-12 07:53:01 +00:00
F _f;
2024-07-10 15:04:11 +00:00
};
struct Defer_Guard_Helper {
template <typename F>
2024-07-12 07:53:01 +00:00
Defer_Guard<F> operator+(F&& f) { return Defer_Guard<F>(std::forward<F>(f)); }
2024-07-10 15:04:11 +00:00
};
#define CONCAT_STR_INTERNAL(A, B) A##B
#define CONCAT_STR(A, B) CONCAT_STR_INTERNAL(A, B)
#define defer const auto CONCAT_STR(defer_, __LINE__) = Defer_Guard_Helper{} + [&]