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のmoveコンストラクターを(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);
}
}