1 | #pragma once |
---|---|
2 | |
3 | #include <functional> |
4 | |
5 | namespace taichi { |
6 | |
7 | class RaiiCleanup { |
8 | public: |
9 | using Func = std::function<void()>; |
10 | |
11 | explicit RaiiCleanup(Func fn); |
12 | ~RaiiCleanup(); |
13 | RaiiCleanup(const RaiiCleanup &) = delete; |
14 | RaiiCleanup &operator=(const RaiiCleanup &) = delete; |
15 | RaiiCleanup(RaiiCleanup &&) = default; |
16 | RaiiCleanup &operator=(RaiiCleanup &&) = default; |
17 | |
18 | private: |
19 | Func fn_; |
20 | }; |
21 | |
22 | RaiiCleanup make_cleanup(RaiiCleanup::Func fn); |
23 | |
24 | } // namespace taichi |
25 |