variadic模板扩展,继承和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_ptr
和std::make_unique
避免明确调用new
并在v_
上迭代以将其删除(v_
将成为std::vector<std::unique_ptr<A>>
(,但无法弄清楚如何将std::make_unique
与初始化列表和Variadic扩展(我怀疑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
的空类型列表。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 为什么 std::unique 不调用 std::sort?
- 我对 std::unique(算法)C++有问题
- std::shared_ptr::unique(),复制和线程安全
- 如何在C++03中用自定义谓词调用std::unique
- C++ std::unique并没有显示我对它的期望
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误
- 为什么 [std::unique] 不能应用于 [std::multiset]?
- 使用 std::unique 和 vector.erase 删除除最后一次出现的重复元素之外的所有元素
- 是否可以在 std::unique<T[ ]> 上应用 std::sort?
- std::unique 是否有大小限制
- 从 std::unique 返回的迭代器的用法
- 使 std::unique<T> 与 std::unique<const T, CustomDeleterType 兼容>
- Std::list.unique()应该使迭代器无效
- 无法使用初始化器列表构造 vector<std::unique<...>>
- 从自定义对象- std:unique的向量中消除重复项会导致崩溃
- 我能保证std::unique将保留第一个元素吗?
- 在 std::vector<std::unordered_set上使用 std::unique(<T>>