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

Gio*_*Gio 3 c++ c++11

下面的函数将存储在类中的内容转换cVector为a 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;
}
Run Code Online (Sandbox Code Playgroud)

上面的工作完美,现在不是使用这样的函数,我想重载赋值运算符,基本上做同样的事情.

我尝试过以下方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

编译很好,但是当我尝试在我的代码中调用它时,例如

std::vector<float> vec = cVectorInstance;
Run Code Online (Sandbox Code Playgroud)

比编译期间出现以下错误:

错误:从'cVector'转换为非标量类型'std :: vector>''

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

Flo*_*ter 5

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

您正在寻找的是重载转换运算符:

operator std::vector< T >() const { ... }
Run Code Online (Sandbox Code Playgroud)