GKD.RoboCtrl
载入中...
搜索中...
未找到
singleton.hpp
1
#pragma once
2
#include <concepts>
3
#include <type_traits>
4
#include <utility>
5
6
#include "
utils/concepts.hpp
"
7
8
namespace
roboctrl::utils
{
9
18
template
<
typename
T>
19
class
singleton_base
:
public
utils::immovable_base
,
public
utils::not_copyable_base
{
20
public
:
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
34
protected
:
35
singleton_base
() =
default
;
36
virtual
~singleton_base
() =
default
;
37
};
38
45
template
<
typename
T>
46
concept
singleton_info
=
requires
(T info) {
47
typename
T::owner_type;
48
};
49
50
template
<
typename
T>
51
concept
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
}
roboctrl::utils::singleton_base
提供单例模式的单例基类
Definition
singleton.hpp:19
roboctrl::utils::singleton_base::instance
static T & instance()
获取单例实例
Definition
singleton.hpp:29
roboctrl::utils::singleton_info
单例信息
Definition
singleton.hpp:46
roboctrl::utils::singleton
Definition
singleton.hpp:51
concepts.hpp
公共Concept与元类型工具。
roboctrl::async::awaitable
asio::awaitable< T > awaitable
协程任务类型。
Definition
async.hpp:42
roboctrl::utils
用于存放工具函数的命名空间。
Definition
concepts.hpp:13
roboctrl::utils::immovable_base
快速继承获得“不可移动”约束的基类。
Definition
concepts.hpp:59
roboctrl::utils::not_copyable_base
快速继承获得“不可复制”约束的基类。
Definition
concepts.hpp:68
include
utils
singleton.hpp
制作者
1.9.8