假设我有一个与 std::vector 兼容的非 STL 向量类型operator std::vector<T>
。是否可以将其元素移动到 std::vector 而不是默认的复制构造,以便
OtherVectorType<SomeClass> f()
{
OtherVectorType<SomeClass> v;
v.pushBack(SomeClass());
v.pushBack(SomeClass());
v.pushBack(SomeClass());
return v;
}
std::vector<SomeClass> sv = f();
创建 std::vector 时会使用 SomeClass 的移动构造函数(3 次)sv
吗?
我想像
template<typename T>
std::vector<T>& operator= (std::vector<T>& self, OtherVectorType<T>&& from)
{
[...]
}
但还没有找到任何可行的解决方案。
为了说明,这是 std::vector 运算符的定义方式:
template<typename T> class OtherVectorType
{
[...]
operator std::vector<T>() const
{
if (!m_size)
return std::vector<T>();
return std::vector<T>(reinterpret_cast<T*>(m_pElements),
reinterpret_cast<T*>(m_pElements) + m_size);
}
}