可变参数模板扩展、继承和 std::unique_ptr

Variadic template expansion, inheritance, and std::unique_ptr

我有这样的代码:

#include <memory>
#include <vector>

using namespace std;

struct A {
    virtual ~A() = default;
};

struct B : public A {
};

template<typename... Ts> struct C {
    C() : v_({new Ts...}) {}

    ...

    std::vector<A*> v_;
};

...

C<B, B, A> bba;

我想使用 std::unique_ptrstd::make_unique 来避免显式调用 new 并迭代 v_ 以在析构函数中删除它 (v_将变为 std::vector<std::unique_ptr<A>>) 但无法弄清楚如何将 std::make_unique 与初始化列表和可变参数扩展结合起来(我怀疑是因为 std::unique_ptr 是仅移动的)。有什么建议么?

像下面这样的 C 构造函数怎么样?

   // C++11 version (std::make_unique() unavailable in C++11)
   C()
    { 
      using unused = int[];

      v_.reserve(sizeof...(Ts));

      (void)unused { 0, ( v_.emplace_back( new Ts ), 0 )... };
    }

   // C++14 version
   C()
    { 
      using unused = int[];

      v_.reserve(sizeof...(Ts));

      (void)unused { 0, ( v_.emplace_back( std::make_unique<Ts>() ), 0 )... };
    }

unused中的初始0(来自aschepler的建议(谢谢!))允许

的定义
C<> etl; 

C 的类型列表为空。