[英]Overloading assignment operator in order to return std::vector
下面的函數將存儲在類cVector
的內容轉換為std::vector
並返回它。
template <class T> std::vector<T> cVector<T>::convertToStdVector()
{
std::vector<T> vec;
vec.resize(m_nSize);
for (unsigned i = 0; i < m_nSize; ++i) {
vec[i] = m_pData[i];
}
return vec;
}
上面的工作完美,現在不是使用這樣的函數,我想重載賦值運算符,基本上做同樣的事情。
我嘗試過以下方法:
template <class T> class cVector
{
public:
cVector(unsigned nSize, AllocEnum eAllocType=MALLOC);
cVector(T *pData, unsigned nSize, bool bCopy=false);
// convert to std vector
std::vector<T> operator=(const cVector<T> &cvec);
//..
//....
}
template <class T> std::vector<T> cVector<T>::operator=(const cVector<T> &cvec)
{
std::vector<T> vec;
vec.resize(m_nSize);
for (unsigned i = 0; i < m_nSize; ++i) {
vec[i] = m_pData[i];
}
return vec;
}
編譯很好,但是當我嘗試在我的代碼中調用它時,例如
std::vector<float> vec = cVectorInstance;
比編譯期間出現以下錯誤:
錯誤:從'cVector'轉換為非標量類型'std :: vector>''
我不確定這里出了什么問題,我希望有人可以提供幫助/解釋。
您定義的賦值運算符實際上是用於將cVector轉移到另一個cVector,而不是轉換為std::vector
,這是您想要的。
您正在尋找的是重載轉換運算符 :
operator std::vector< T >() const { ... }
賦值運算符通常看起來像這樣:
class C
{
public:
C& operator=(const C& other) {...}
};
它用於將某些內容分配給C
類的實例而不是其他類的內容。 你可以重載它,以便它接受其他類的對象並將它們分配給你的類,但不是相反。 所以
cVector& operator=(const std::vector<...>& other) { ... }
將值放在other
值中並將它們分配給您的cVector
。 如果你想做另一件事,只需使用你的convertToStdVector
函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.