Здравствуйте, Sm0ke, Вы писали:
S>В мейкер придётся ещё передавать параметры создания объекта, и в нём хранить. Но в целом идея ясна, спасибо
S>upd: Хотя выглядит как костыль)
Можно заморочиться, и сделать универсальный Maker:
http://coliru.stacked-crooked.com/a/401ae1d975a23db1
template <typename T, typename...A>
class Maker
{
public:
explicit Maker(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;
};
template <typename T, typename... A>
Maker<T, A...> maker(A&&...args) { return Maker<T, A...>{ std::forward<A>(args)...}; }