GKD.RoboCtrl
载入中...
搜索中...
未找到
roboctrl::multiton 命名空间参考

多例相关的基础组件 更多...

详细描述

多例相关的基础组件

在机器人的电控中,有很多类是会在初始化时创建多个对象,并且生命周期几乎是从程序开始到结束,例如马达对象,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 ()
 

类型定义说明

◆ key_type_t

template<multiton_info T>
using roboctrl::multiton::key_type_t = typedef typename T::key_type

在文件 multiton.hpp90 行定义.

◆ owner_type_t

template<multiton_info T>
using roboctrl::multiton::owner_type_t = typedef typename T::owner_type

在文件 multiton.hpp95 行定义.

函数说明

◆ desc()

auto roboctrl::multiton::desc ( const descable auto owner) -> std::string
inline

获取一个可描述对象的描述信息

模板参数
T多例类类型
参数
owner多例类对象
返回
std::string 多例类的描述信息

在文件 multiton.hpp262 行定义.

被这些函数引用 roboctrl::log::logable< T >::log().

◆ get() [1/3]

template<typename T >
requires (!owner<T> && utils::singleton<T>)
auto roboctrl::multiton::get ( ) -> T&
inline

获取单例实例

模板参数
T单例类类型
返回
T& 单例对象的引用

根据类型获取单例对象

示例:获取Gimbal控制器单例对象:

asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:42

在文件 multiton.hpp183 行定义.

◆ get() [2/3]

template<multiton_info info_type>
auto roboctrl::multiton::get ( const info_type &  info) -> owner_type_t<info_type>&
inline

通过info_type获取多例实例

模板参数
info_type多例类的info_type类型
参数
info多例类的info_type对象
返回
owner_type_t<info_type>& 多例对象的引用

在文件 multiton.hpp245 行定义.

◆ get() [3/3]

template<owner owner_type>
auto roboctrl::multiton::get ( const typename details::multiton_impl< owner_type >::key_type &  key) -> owner_type&
inline

获取多例实例

通过指定的key来获取多例对象

示例:获取指定的CAN对象:

模板参数
owner_type多例类类型
参数
key用于获取实例的key
返回
owner_type& 多例对象的引用

在文件 multiton.hpp165 行定义.

◆ init() [1/3]

template<info... info_types>
auto roboctrl::multiton::init ( const info auto info,
const info_types &...  infos 
) -> bool
inline

批量初始化多例实例或单例实例

模板参数
info_types多例类或单例类的info_type类型
参数
infos多例类或单例类的info_type对象

用给定的info_type批量初始化多例实例或单例实例,可以在这个函数中初始化不同类型的多例或单例对象。

在文件 multiton.hpp230 行定义.

引用了 init().

◆ init() [2/3]

template<info info_type>
auto roboctrl::multiton::init ( const info_type &  info) -> bool
inline

初始化多例实例或单例实例

模板参数
info_type多例类或单例类的info_type类型
参数
info多例类或单例类的info_type对象

用给定的info_type初始化多例实例或单例实例

示例:初始化CAN对象:

"can1"
}
);
auto init(const info_type &info) -> bool
初始化多例实例或单例实例
Definition multiton.hpp:205
CAN 初始化参数。
Definition can.h:29

在文件 multiton.hpp205 行定义.

引用了 init().

被这些函数引用 init() , 以及 init().

◆ init() [3/3]

template<info info_type>
auto roboctrl::multiton::init ( std::initializer_list< info_type >  infos) -> bool
inline

在文件 multiton.hpp214 行定义.

◆ instances()

template<owner owner_type>
auto roboctrl::multiton::instances ( )

在文件 multiton.hpp267 行定义.