将可变 unique_ptr 包存储到元组中
Storing variadic unique_ptr pack into a tuple
我正在尝试编写一个构造函数,它将 unique_ptr
的可变参数包作为参数并将其存储在元组中:
template<class... E>
class A
{
std::tuple<std::unique_ptr<E>...> a_;
public:
A(std::unique_ptr<E>&&... a)
: a_(std::make_tuple(std::move(a)...)) {}
};
但是当我使用多个参数调用构造函数时编译失败——例如
A< double> obj(std::make_unique<double>(2.0), std::make_unique<double>(3.0));
编译失败 tuple::test_method()
。
我的问题是:
- 我正在尝试做的事情有什么内在的错误吗?
- 可行吗?
谢谢
在这种情况下,问题似乎只是您的变量类型为 A<double>
但您传递的是两个值,因此您需要使用 A<double, double>
.
A<double, double> obj(std::make_unique<double>(2.0), std::make_unique<double>(3.0));
或者,如果您使用 auto
.
声明变量,则可以消除声明模板参数的需要
auto obj = A(std::make_unique<double>(2.0), std::make_unique<double>(3.0));
我正在尝试编写一个构造函数,它将 unique_ptr
的可变参数包作为参数并将其存储在元组中:
template<class... E>
class A
{
std::tuple<std::unique_ptr<E>...> a_;
public:
A(std::unique_ptr<E>&&... a)
: a_(std::make_tuple(std::move(a)...)) {}
};
但是当我使用多个参数调用构造函数时编译失败——例如
A< double> obj(std::make_unique<double>(2.0), std::make_unique<double>(3.0));
编译失败 tuple::test_method()
。
我的问题是:
- 我正在尝试做的事情有什么内在的错误吗?
- 可行吗?
谢谢
在这种情况下,问题似乎只是您的变量类型为 A<double>
但您传递的是两个值,因此您需要使用 A<double, double>
.
A<double, double> obj(std::make_unique<double>(2.0), std::make_unique<double>(3.0));
或者,如果您使用 auto
.
auto obj = A(std::make_unique<double>(2.0), std::make_unique<double>(3.0));