GKD.RoboCtrl
载入中...
搜索中...
未找到
multiton.hpp 文件参考

用于实现多例模式的通用组件。 更多...

详细描述

用于实现多例模式的通用组件。

作者
Junity

多例模式允许根据不同的key获取对应的实例,适用于需要管理多个相似对象的场景,例如马达、传感器等等。

实现一个多例类需要定义一个info_type结构体,包含key_type和owner_type类型别名,以及一个key()成员函数用于获取实例的唯一标识符。 除此之外,还应该包含所有用于初始化这个多例类的信息。在初始化时,roboctrl::init()函数会将info_type传递给多例类的构造函数进行初始化。在程序 开始时,可以通过调用multiton::init函数初始化所需的多例实例。之后,可以通过roboctrl<T>::get(key)根据key获取对应的实例。

版本
0.1
日期
2025-11-09

在文件 multiton.hpp 中定义.

#include <concepts>
#include <initializer_list>
#include <stdexcept>
#include <string>
#include <unordered_map>
#include <memory>
#include <mutex>
#include <format>
#include <utility>
#include "utils/concepts.hpp"
#include "utils/singleton.hpp"

浏览源代码.

struct  roboctrl::multiton::details::multiton_impl< owner_type >
 

命名空间

namespace  roboctrl::multiton
 多例相关的基础组件
 

概念

concept  roboctrl::multiton::descable
 拥有描述信息的类。
 
concept  roboctrl::multiton::multiton_info
 多例类的info_type concept
 
concept  roboctrl::multiton::info
 通用的info concept,主要用于统一单例和多例的info概念。这个concept的主要目的是让单例和多例都可以被roboctrl::get获取。
 
concept  roboctrl::multiton::owner
 描述多例类的concept
 

类型定义

template<multiton_info T>
using roboctrl::multiton::key_type_t = typename T::key_type
 
template<multiton_info T>
using roboctrl::multiton::owner_type_t = typename T::owner_type
 
template<multiton_info info_type>
using roboctrl::multiton::details::impl_t = multiton_impl< owner_type_t< info_type > >
 

函数

template<owner owner_type>
auto roboctrl::multiton::get (const typename details::multiton_impl< owner_type >::key_type &key) -> owner_type &
 获取多例实例
 
template<typename T >
requires (!owner<T> && utils::singleton<T>)
auto roboctrl::multiton::get () -> T &
 获取单例实例
 
template<info info_type>
auto roboctrl::multiton::init (const info_type &info) -> bool
 初始化多例实例或单例实例
 
template<info info_type>
auto roboctrl::multiton::init (std::initializer_list< info_type > infos) -> bool
 
template<info... info_types>
auto roboctrl::multiton::init (const info auto &info, const info_types &... infos) -> bool
 批量初始化多例实例或单例实例
 
template<multiton_info info_type>
auto roboctrl::multiton::get (const info_type &info) -> owner_type_t< info_type > &
 通过info_type获取多例实例
 
auto roboctrl::multiton::desc (const descable auto &owner) -> std::string
 获取一个可描述对象的描述信息
 
template<owner owner_type>
auto roboctrl::multiton::instances ()
 

类型定义说明

◆ impl_t

template<multiton_info info_type>
using roboctrl::multiton::details::impl_t = typedef multiton_impl<owner_type_t<info_type> >

在文件 multiton.hpp138 行定义.