21#ifndef EASYNAV_COMMON__SINGLETON_H_
22#define EASYNAV_COMMON__SINGLETON_H_
35 template<
typename ... Args>
38 std::call_once(init_flag_, [&]() {
39 instance_ = std::make_unique<C>(std::forward<Args>(args)...);
41 return instance_.get();
47 init_flag_ = std::once_flag();
50 template<
typename ... Args>
51 static C &
get(Args &&... args)
65 static std::unique_ptr<C> instance_;
66 static std::once_flag init_flag_;
70std::unique_ptr<C> Singleton<C>::instance_ =
nullptr;
73std::once_flag Singleton<C>::init_flag_;
75#define SINGLETON_DEFINITIONS(ClassName) \
77 static ClassName * getInstance() \
79 return ::easynav::Singleton<ClassName>::getInstance(); \
81 template<typename ... Args> \
82 static ClassName * getInstance(Args && ... args) \
84 return ::easynav::Singleton<ClassName>::getInstance( \
85 std::forward<Args>(args)...); \
static C & get(Args &&... args)
Definition Singleton.hpp:51
Singleton(const Singleton &)=delete
static void removeInstance()
Definition Singleton.hpp:44
Singleton & operator=(const Singleton &)=delete
static C * getInstance(Args &&... args)
Definition Singleton.hpp:36
Definition RTTFBuffer.hpp:30