Сообщение 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
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
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...>;