|
GKD.RoboCtrl
|
用于实现多例模式的通用组件。 更多...
用于实现多例模式的通用组件。
多例模式允许根据不同的key获取对应的实例,适用于需要管理多个相似对象的场景,例如马达、传感器等等。
实现一个多例类需要定义一个info_type结构体,包含key_type和owner_type类型别名,以及一个key()成员函数用于获取实例的唯一标识符。 除此之外,还应该包含所有用于初始化这个多例类的信息。在初始化时,roboctrl::init()函数会将info_type传递给多例类的构造函数进行初始化。在程序 开始时,可以通过调用multiton::init函数初始化所需的多例实例。之后,可以通过roboctrl<T>::get(key)根据key获取对应的实例。
在文件 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 () |
| using roboctrl::multiton::details::impl_t = typedef multiton_impl<owner_type_t<info_type> > |
在文件 multiton.hpp 第 138 行定义.