mirror of
https://github.com/es3n1n/defendnot.git
synced 2026-08-02 10:32:01 +00:00
initial
This commit is contained in:
30
cxx-shared/shared/defer.hpp
Normal file
30
cxx-shared/shared/defer.hpp
Normal file
@@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
#include <utility>
|
||||
|
||||
template <typename Callable>
|
||||
class DeferHolder {
|
||||
public:
|
||||
explicit DeferHolder(Callable&& callable) noexcept: callable_(std::forward<Callable>(callable)) { }
|
||||
|
||||
~DeferHolder() {
|
||||
callable_();
|
||||
}
|
||||
|
||||
private:
|
||||
Callable callable_;
|
||||
};
|
||||
|
||||
class Defer {
|
||||
public:
|
||||
constexpr Defer() noexcept = default;
|
||||
constexpr ~Defer() noexcept = default;
|
||||
|
||||
template <typename Callable>
|
||||
DeferHolder<Callable> operator%(Callable&& cb) {
|
||||
return DeferHolder<Callable>{std::forward<Callable>(cb)};
|
||||
}
|
||||
};
|
||||
|
||||
#define COMMON_CAT_(x, y) x##y
|
||||
#define COMMON_CAT(x, y) COMMON_CAT_(x, y)
|
||||
#define defer auto COMMON_CAT(_defer_instance_, __LINE__) = Defer{} % [&]()
|
||||
Reference in New Issue
Block a user