|
GKD.RoboCtrl
|
多例相关的基础组件 更多...
多例相关的基础组件
在机器人的电控中,有很多类是会在初始化时创建多个对象,并且生命周期几乎是从程序开始到结束,例如马达对象,Can对象等等 ,我们称这种对象为多例。我们希望有一个简单的拿到各个实例的方法。
在代码中,我们抽象出了一个多例类的管理模式:每个多例类有一个info_type,用于存放用来初始化这个类的相关信息。info_type中有一个 叫做 key_type 的类型,这是用于区分各个多例对象的“标识符”。例如,can对象的key_type是一个字符串,表示这个can的名称;那么如果有一 个can叫"can0",在初始化后,就可以用 roboctrl::get<can_io>("can0") 来获取到这个can对象的引用。
为了满足这个管理模式,所有的多例类都应该有一个接受 const info_type& 参数的构造函数,用于初始化这个多例对象。这个函数会在程序开 始时,在roboctrl::init()函数中被调用。
概念 | |
| concept | descable |
| 拥有描述信息的类。 | |
| concept | multiton_info |
| 多例类的info_type concept | |
| concept | info |
| 通用的info concept,主要用于统一单例和多例的info概念。这个concept的主要目的是让单例和多例都可以被roboctrl::get获取。 | |
| concept | owner |
| 描述多例类的concept | |
类型定义 | |
| template<multiton_info T> | |
| using | key_type_t = typename T::key_type |
| template<multiton_info T> | |
| using | owner_type_t = typename T::owner_type |
函数 | |
| template<owner owner_type> | |
| auto | get (const typename details::multiton_impl< owner_type >::key_type &key) -> owner_type & |
| 获取多例实例 | |
| template<typename T > requires (!owner<T> && utils::singleton<T>) | |
| auto | get () -> T & |
| 获取单例实例 | |
| template<info info_type> | |
| auto | init (const info_type &info) -> bool |
| 初始化多例实例或单例实例 | |
| template<info info_type> | |
| auto | init (std::initializer_list< info_type > infos) -> bool |
| template<info... info_types> | |
| auto | init (const info auto &info, const info_types &... infos) -> bool |
| 批量初始化多例实例或单例实例 | |
| template<multiton_info info_type> | |
| auto | get (const info_type &info) -> owner_type_t< info_type > & |
| 通过info_type获取多例实例 | |
| auto | desc (const descable auto &owner) -> std::string |
| 获取一个可描述对象的描述信息 | |
| template<owner owner_type> | |
| auto | instances () |
在文件 multiton.hpp 第 90 行定义.
在文件 multiton.hpp 第 95 行定义.
获取一个可描述对象的描述信息
| T | 多例类类型 |
| owner | 多例类对象 |
在文件 multiton.hpp 第 262 行定义.
被这些函数引用 roboctrl::log::logable< T >::log().
|
inline |
|
inline |
通过info_type获取多例实例
| info_type | 多例类的info_type类型 |
| info | 多例类的info_type对象 |
在文件 multiton.hpp 第 245 行定义.
|
inline |
获取多例实例
通过指定的key来获取多例对象
示例:获取指定的CAN对象:
| owner_type | 多例类类型 |
| key | 用于获取实例的key |
在文件 multiton.hpp 第 165 行定义.
|
inline |
批量初始化多例实例或单例实例
| info_types | 多例类或单例类的info_type类型 |
| infos | 多例类或单例类的info_type对象 |
用给定的info_type批量初始化多例实例或单例实例,可以在这个函数中初始化不同类型的多例或单例对象。
在文件 multiton.hpp 第 230 行定义.
引用了 init().
初始化多例实例或单例实例
| info_type | 多例类或单例类的info_type类型 |
| info | 多例类或单例类的info_type对象 |
用给定的info_type初始化多例实例或单例实例
示例:初始化CAN对象:
在文件 multiton.hpp 第 205 行定义.
引用了 init().
|
inline |
在文件 multiton.hpp 第 214 行定义.
| auto roboctrl::multiton::instances | ( | ) |
在文件 multiton.hpp 第 267 行定义.