Информация об изменениях

Сообщение Re[3]: другой Вопрос по стандартному unique_ptr от 19.07.2023 13:08

Изменено 19.07.2023 13:12 rg45

Re[3]: другой Вопрос по стандартному unique_ptr
Здравствуйте, Sm0ke, Вы писали:

S>В мейкер придётся ещё передавать параметры создания объекта, и в нём хранить. Но в целом идея ясна, спасибо

S>upd: Хотя выглядит как костыль)

Можно заморочиться, и сделать универсальный Maker:

http://coliru.stacked-crooked.com/a/49a89f12a0ac2b29

template <typename T, typename...A>
class Maker
{
public:

    explicit Maker(std::type_identity<T>, A&&...args)
        : m_args(std::forward<A>(args)...) {}

    operator std::unique_ptr<T>() &&
    {
        return std::apply(std::make_unique<T, A&&...>, std::move(m_args));
    }

private:

    std::tuple<A&&...> m_args;
};
Re[3]: другой Вопрос по стандартному unique_ptr
Здравствуйте, Sm0ke, Вы писали:

S>В мейкер придётся ещё передавать параметры создания объекта, и в нём хранить. Но в целом идея ясна, спасибо

S>upd: Хотя выглядит как костыль)

Можно заморочиться, и сделать универсальный Maker:

http://coliru.stacked-crooked.com/a/49a89f12a0ac2b29

template <typename T, typename...A>
class Maker
{
public:

    explicit Maker(std::type_identity<T>, A&&...args)
        : m_args(std::forward<A>(args)...) {}

    operator std::unique_ptr<T>() &&
    {
        return std::apply(std::make_unique<T, A&&...>, std::move(m_args));
    }

private:

    std::tuple<A&&...> m_args;
};

// CTAD user-defined deduction guide
template <typename T, typename... A>
Maker(std::type_identity<T>, A&&...) -> Maker<T, A...>;