| 123456789101112131415161718192021222324 |
- #pragma once
- #include <functional>
- #define CONCAT2(A, B) A##B
- #define CONCAT(A, B) CONCAT2(A, B)
- #define scoped_state(prop, value) auto CONCAT(scoped_state_, __LINE__) = ScopedState(prop, value)
- namespace jvalidate::detail {
- class ScopedState {
- private:
- std::function<void()> reset_;
- public:
- template <typename T>
- ScopedState(T & prop, T value) : reset_([reset = prop, &prop]() { prop = reset; }) {
- prop = std::move(value);
- }
- ~ScopedState() { reset_(); }
- explicit operator bool() const { return true; }
- };
- }
|