16#ifndef EASYNAV_COMMON__SINGLETON_H_
17#define EASYNAV_COMMON__SINGLETON_H_
30 template<
typename ... Args>
33 std::call_once(init_flag_, [&]() {
34 instance_ = std::make_unique<C>(std::forward<Args>(args)...);
36 return instance_.get();
42 init_flag_ = std::once_flag();
45 template<
typename ... Args>
46 static C &
get(Args &&... args)
60 static std::unique_ptr<C> instance_;
61 static std::once_flag init_flag_;
65std::unique_ptr<C> Singleton<C>::instance_ =
nullptr;
68std::once_flag Singleton<C>::init_flag_;
70#define SINGLETON_DEFINITIONS(ClassName) \
72 static ClassName * getInstance() \
74 return ::easynav::Singleton<ClassName>::getInstance(); \
76 template<typename ... Args> \
77 static ClassName * getInstance(Args && ... args) \
79 return ::easynav::Singleton<ClassName>::getInstance( \
80 std::forward<Args>(args)...); \
static C & get(Args &&... args)
Definition Singleton.hpp:46
Singleton(const Singleton &)=delete
static void removeInstance()
Definition Singleton.hpp:39
Singleton & operator=(const Singleton &)=delete
static C * getInstance(Args &&... args)
Definition Singleton.hpp:31
Definition CircularBuffer.hpp:23