21 template <
bool has_result = true>
22 struct action_caller {
23 template <
typename actor,
typename result_t,
typename propagator_state_t,
25 static void action(
const actor& act, propagator_state_t& state,
26 const stepper_t&
stepper, result_t& result) {
27 act(state, stepper, result.template
get<detail::result_type_t<actor>>());
33 struct action_caller<
false> {
34 template <
typename actor,
typename result_t,
typename propagator_state_t,
36 static void action(
const actor& act, propagator_state_t& state,
37 const stepper_t&
stepper, result_t& ) {
44 template <
typename... actors>
50 template <
typename first,
typename... others>
52 template <
typename T,
typename result_t,
typename propagator_state_t,
54 static void action(
const T& obs_tuple, propagator_state_t& state,
55 const stepper_t&
stepper, result_t& result) {
56 constexpr
bool has_result = has_result_type_v<first>;
57 const auto& this_action = std::get<first>(obs_tuple);
58 action_caller<has_result>::action(this_action, state, stepper, result);
65 template <
typename last>
67 template <
typename T,
typename result_t,
typename propagator_state_t,
69 static void action(
const T& obs_tuple, propagator_state_t& state,
70 const stepper_t&
stepper, result_t& result) {
71 constexpr
bool has_result = has_result_type_v<last>;
72 const auto& this_action = std::get<last>(obs_tuple);
73 action_caller<has_result>::action(this_action, state, stepper, result);
80 template <
typename T,
typename result_t,
typename propagator_state_t,
82 static void action(
const T& , propagator_state_t& ,
83 const stepper_t& , result_t& ) {}