将可变 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()

我的问题是:

  1. 我正在尝试做的事情有什么内在的错误吗?
  2. 可行吗?

谢谢

在这种情况下,问题似乎只是您的变量类型为 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));