duckstax / actor-zeta

Library that provides an actor style message-passing programming model (in C++).
BSD 3-Clause "New" or "Revised" License
64 stars 9 forks source link

changing signature of a function #128

Closed kotbegemot closed 2 years ago

kotbegemot commented 2 years ago
        template<
            class Actor,
            class Inserter,
            class... Args,
            class = type_traits::enable_if_t<std::is_base_of<actor_abstract, Actor>::value>>
        auto spawn_actor(const Inserter& inserter, Args&&... args) -> address_t {
            auto allocate_byte = sizeof(Actor);
            auto allocate_byte_alignof = alignof(Actor);
            void* buffer = resource()->allocate(allocate_byte, allocate_byte_alignof);
            auto* actor = new (buffer) Actor(static_cast<Supervisor*>(this), std::forward<Args>(args)...);
            auto address = actor->address();
            inserter(actor);
            return address;
        }
        template<
            class Inserter,
            class... Args,
            class = type_traits::enable_if_t<std::is_base_of<actor_abstract, Actor>::value>>
        auto spawn_actor(const Inserter& inserter, Args&&... args) -> address_t {
            using call_trait =  type_traits::get_callable_trait_t<type_traits::remove_reference_t<F>>;
            using Actor = type_traits::tl_slice_t<typename call_trait::args_types, 0, args_size>;
            auto allocate_byte = sizeof(Actor);
            auto allocate_byte_alignof = alignof(Actor);
            void* buffer = resource()->allocate(allocate_byte, allocate_byte_alignof);
            auto* actor = new (buffer) Actor(static_cast<Supervisor*>(this), std::forward<Args>(args)...);
            auto address = actor->address();
            inserter(actor);
            return address;
        }