有一个模板容器类,我想让它支持它std::unique_ptr
作为内容,但是一些方法的实现需要改变(make move而不是copy),那么,是否有可能以某种方式为每个人专门化这些方法std::unique_ptr
?
试图这样做template<class T> void Container<std::unique_ptr<T> >::linearise()
- 编译器发誓。
我不明白以下信息与该问题有何关系,但应评论员的要求添加。
这就是我与接受 T 的人合作的方式:
void push_back(T const & elem) {
if (m_size == m_capacity)
throw std::overflow_error("Pushing to full container");
m_body[realPlace(m_size)] = elem;
++m_size;
}
void push_back(T && elem) {
if (m_size == m_capacity)
throw std::overflow_error("Pushing to full container");
m_body[realPlace(m_size)] = std::move(elem);
++m_size;
}
下面是一个不带参数但需要内容信息的方法示例:
T* linearize() {
if (is_linear())
return m_body;
byte *oldMemPool = m_memPool;
T *oldBody = m_body;
alloc_body(m_capacity);
for (size_t i = 0; i < m_size; ++i)
m_body[i] = oldBody[realPlace(i)];
m_begin = 0;
delete[] oldMemPool;
return m_body;
}
好吧,我没有看到直接的解决方案,但这里有一个解决方法 - 与
unique_ptr
您可以移动但不能复制的事实有关。我举一个简单的例子,我想你自己会弄清楚如何申请: