重载赋值运算符以返回std :: vector

时间:2017-07-26 09:34:20

标签: c++ c++11

下面的函数将存储在类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&gt;'请“

我不确定这里出了什么问题,我希望有人可以提供帮助/解释。

2 个答案:

答案 0 :(得分:5)

您定义的赋值运算符实际上是用于将cVector转移到另一个cVector,而不是转换为std::vector,这就是您想要的。

您正在寻找的是超载conversion operator

operator std::vector< T >() const { ... }

答案 1 :(得分:1)

赋值运算符通常看起来像这样:

class C 
{
public:
    C& operator=(const C& other) {...}
};

它用于为类C的实例分配某些内容而不是其他类的内容。你可以重载它,以便它接受其他类的对象并将它们分配给你的类,但不是相反。所以

cVector& operator=(const std::vector<...>& other) { ... }

将获取other中的值并将其分配给您的cVector。 如果你想做另一件事,只需使用你的convertToStdVector功能。