下面的函数将存储在类cVector
中的内容转换为std::vector
,并返回它。重载赋值运算符以返回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;
比我得到的编译过程中出现以下错误:
error: conversion from 'cVector' to non-scalar type 'std::vector >' requested"
我不知道是怎么回事错在这里,我希望有人能帮助/解释。
你不应该用返回值重载。这纯粹是错误的。 –
分配运营商应该返回对“* this”的引用。 – HatsuPointerKun
为什么你想首先编写自己的矢量类?无论你想达到什么目标,都可能已经可以实现(并且以更好的方式实现),使用'std :: vector'。 –