19 typename T::state_type;
20 typename T::input_type;
21 typename T::params_type;
22 { T(std::declval<typename T::params_type>()) };
23 {
c.update(std::declval<typename T::input_type>()) } -> std::same_as<void>;
24 {
c.state() } -> std::same_as<typename T::state_type>;
33 static_assert(
sizeof...(Cs) > 0);
35 template<std::
size_t N>
36 using state_type_n =
typename std::tuple_element<
N, std::tuple<
typename Cs::state_type...>>::type;
38 template<std::
size_t N>
39 using input_type_n =
typename std::tuple_element<
N, std::tuple<
typename Cs::input_type...>>::type;
41 using state_type = state_type_n<
sizeof...(Cs) - 1>;
43 using params_type = std::tuple<
typename Cs::params_type...>;
45 std::tuple<
Cs...> controllers_;
51 : controllers_(std::forward<
Cs>(
cs)...) {}
57 : controllers_(std::
apply(
58 [](
auto&&...
ps){
return std::make_tuple(
Cs(std::forward<
decltype(
ps)>(
ps))...); },
69 std::apply([&](
auto&...
ctrls){
78 const state_type&
state()
const {
79 return std::get<
sizeof...(Cs) - 1>(controllers_).state();
83template<controller controller_type>
84controller_type make_controller(
const typename controller_type::info_type& info){
控制器概念,约束 update/state/构造能力。
asio::awaitable< T > awaitable
协程任务类型。
void update(const input_type &input)
推动控制链一次,依次更新所有控制器。
control_chain(params_type &¶ms)
使用各控制器的参数构造实例。
const state_type & state() const
读取链路末尾控制器的状态。
control_chain(Cs &&... cs)
直接以控制器实例初始化。