簡體   English   中英

重載賦值運算符以返回std :: vector

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM