17 #include <boost/hana/type.hpp>
18 #include <boost/hana/unpack.hpp>
20 namespace hana = boost::hana;
31 template <
typename... actors_t>
32 struct ActionList :
public detail::Extendable<actors_t...> {
34 static_assert(not detail::has_duplicates_v<actors_t...>,
35 "same action type specified several times");
37 using detail::Extendable<actors_t...>
::tuple;
41 template <
template <
typename...>
class R>
42 using result_type =
typename decltype(hana::unpack(
43 detail::type_collector_t<detail::result_type_extractor, actors_t...>,
44 hana::template_<R>))::
type;
46 using detail::Extendable<actors_t...>::get;
49 ActionList() =
default;
54 ActionList(
const ActionList<actors_t...>& actors) =
default;
59 ActionList(ActionList<actors_t...>&& actors) =
default;
64 ActionList<actors_t...>&
operator=(
const ActionList<actors_t...>& actors) =
70 ActionList<actors_t...>&
operator=(ActionList<actors_t...>&& actors) =
85 template <
typename propagator_state_t,
typename stepper_t,
86 typename navigator_t,
typename result_t,
typename...
Args>
87 void operator()(propagator_state_t&
state,
const stepper_t&
stepper,
88 const navigator_t&
navigator, result_t& result,
90 using impl = detail::action_list_impl<actors_t...>;
92 std::forward<Args>(
args)...);