GKD.RoboCtrl
载入中...
搜索中...
未找到
singleton.hpp
1#pragma once
2#include <concepts>
3#include <type_traits>
4#include <utility>
5
6#include "utils/concepts.hpp"
7
8namespace roboctrl::utils{
9
18template <typename T>
20public:
21 singleton_base(const singleton_base&) = delete;
22 singleton_base& operator=(const singleton_base&) = delete;
23
29 static T& instance() {
30 static T instance;
31 return instance;
32 }
33
34protected:
35 singleton_base() = default;
36 virtual ~singleton_base() = default;
37};
38
45template<typename T>
46concept singleton_info = requires (T info) {
47 typename T::owner_type;
48};
49
50template<typename T>
51concept singleton = std::is_base_of_v<singleton_base<T>, T> and
52 requires (T t) {
53 typename T::info_type;
54 {t.init(std::declval<typename T::info_type>())} -> std::same_as<bool>;
55 };
56}
提供单例模式的单例基类
Definition singleton.hpp:19
static T & instance()
获取单例实例
Definition singleton.hpp:29
公共Concept与元类型工具。
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:42
用于存放工具函数的命名空间。
Definition concepts.hpp:13
快速继承获得“不可移动”约束的基类。
Definition concepts.hpp:59
快速继承获得“不可复制”约束的基类。
Definition concepts.hpp:68