mirror of
https://github.com/ksherlock/dot_clean.git
synced 2025-02-07 22:30:35 +00:00
27 lines
449 B
C
27 lines
449 B
C
|
#ifndef __defer_h__
|
||
|
#define __defer_h__
|
||
|
|
||
|
#include <utility>
|
||
|
#include <functional>
|
||
|
|
||
|
|
||
|
class defer {
|
||
|
public:
|
||
|
typedef std::function<void()> FX;
|
||
|
defer() = default;
|
||
|
|
||
|
defer(FX &&fx) : _fx(std::forward<FX>(fx)) {}
|
||
|
defer(const defer &) = delete;
|
||
|
defer(defer &&) = default;
|
||
|
defer & operator=(const defer &) = delete;
|
||
|
defer & operator=(defer &&) = default;
|
||
|
|
||
|
void cancel() { _fx = nullptr; }
|
||
|
~defer() { if (_fx) _fx(); }
|
||
|
private:
|
||
|
FX _fx;
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif
|