Stride Reference Manual  1.0
etc.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <memory>
4 
5 namespace stride {
6 namespace util {
7 
8 // Like golang's 'defer' statement
9 
10 template<typename Func>
11 class Defer {
12 public:
13  Defer(const Func& f) : m_func(f) {}
14 
15  ~Defer() { m_func(); }
16 
17 private:
18  const Func& m_func;
19 };
20 
21 template<typename Func>
22 Defer<Func> _defer(const Func& f) {
23  return Defer<Func>(f);
24 }
25 
26 #define __defer_name(name) _defer_ ## name
27 #define __defer(line, s) auto __defer_name(line) = stride::util::_defer([&](){ s ; });
28 #define defer(s) __defer(__LINE__, s)
29 
30 }
31 }
32 
33 
34 #if __cplusplus <= 201103L
35 
36 namespace std {
37 template<typename T, typename... Args>
38 std::unique_ptr<T> make_unique(Args&& ... args) {
39  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
40 }
41 }
42 
43 #endif
Defer(const Func &f)
Definition: etc.h:13
Defer< Func > _defer(const Func &f)
Definition: etc.h:22
Time Dependent Person DataType.
Definition: NoBehaviour.h:17
const Func & m_func
Definition: etc.h:18
STL namespace.
std::unique_ptr< T > make_unique(Args &&...args)
Definition: etc.h:38