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)...);
}
假设我们有一个 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)...);
}