讓我們假設我有一個非STL矢量類型,它與std :: vector兼容operator std::vector<T>
。是否有可能移動其元素爲std :: vector的而不是默認的拷貝構造,使擴展std :: vector以移動其他矢量類型的元素
OtherVectorType<SomeClass> f()
{
OtherVectorType<SomeClass> v;
v.pushBack(SomeClass());
v.pushBack(SomeClass());
v.pushBack(SomeClass());
return v;
}
std::vector<SomeClass> sv = f();
將使用SomeClass的的移動構造函數(3次)創建的std ::矢量sv
什麼時候?
我想象像
template<typename T>
std::vector<T>& operator= (std::vector<T>& self, OtherVectorType<T>&& from)
{
[...]
}
,但沒有發現任何可行的解決方案呢。
爲了說明,這是性病::矢量運營商是如何定義的:
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);
}
}
你想在那裏move_iterator – 2013-03-24 09:54:35
而你要C++ 11 *這個參考機制,所以你可以重載是否這是一個左值還是右值 – 2013-03-24 09:58:34