class 模板在使用 std::make_unique 构造实例时推导类型的方式?

Way for class template to deduce type when constructing an instance with std::make_unique?

假设我们有一个 class 模板 Foo,它有一个类型模板参数,它可以从其构造函数中的参数推导出来。如果我们使用 std::make_unique 来构造 Foo 的实例,是否有一种方法可以让 Foo 的构造函数推导出模板参数,就像它的构造函数被正常调用时那样?这是实现此目标的最简单方法吗?

std::make_unique< decltype(Foo{...}) > (...);

这看起来很干净,但是如果 Foo 的构造函数有很多参数,它可能会变成一条非常难看的线。

您可以利用辅助函数将丑陋的代码包装到漂亮的包装器中。那看起来像

template <typename... Args>
auto make_foo_ptr(Args&&... args)
{
    return std::make_unique<decltype(Foo{std::forward<Args>(args)...})>(std::forward<Args>(args)...);
}