10 #include <type_traits>
26 template <
class Object>
30 template <
typename U =
Object,
class... Args,
typename std::enable_if_t<
31 std::is_constructible_v<U, Args...> ||
32 std::is_constructible_v<U, ActorRef<U>, Args...>
36 emplaceObject(std::forward<Args>(args)...);
37 parent.mailbox->open(scheduler);
42 template <
class ArgsTuple, std::
size_t ArgCount = std::tuple_size<std::decay_t<ArgsTuple>>::value>
45 emplaceObject(std::forward<ArgsTuple>(args), std::make_index_sequence<ArgCount>{});
46 parent.mailbox->open(scheduler);
52 parent.mailbox->close();
53 parent.object().~Object();
58 template <
typename U =
Object,
class... Args,
typename std::enable_if_t<std::is_constructible_v<U, ActorRef<U>, Args...>> * =
nullptr>
59 void emplaceObject(Args&&... args_) {
60 new (&parent.objectStorage)
Object(parent.self(), std::forward<Args>(args_)...);
64 template <
typename U =
Object,
class... Args,
typename std::enable_if_t<std::is_constructible_v<U, Args...>> * =
nullptr>
65 void emplaceObject(Args&&... args_) {
66 new (&parent.objectStorage)
Object(std::forward<Args>(args_)...);
70 template <
class ArgsTuple, std::size_t... I>
71 void emplaceObject(ArgsTuple&& args, std::index_sequence<I...>) {
72 emplaceObject(std::move(std::get<I>(std::forward<ArgsTuple>(args)))...);
76 AspiringActor<Object>& parent;
EstablishedActor(Scheduler &scheduler, AspiringActor< Object > &parent_, ArgsTuple &&args)
EstablishedActor(const EstablishedActor &)=delete
EstablishedActor(Scheduler &scheduler, AspiringActor< Object > &parent_, Args &&... args)
constexpr ObjectType Object