下面的函数将存储在类中的内容转换为< 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
的引用。 - HatsuPointerKunstd::vector
实现(而且以更好的方式实现)。 - Florian WintercVector
类有公共方法来返回数据缓冲区的指针,那么你可以简单地使用std::vector
提供的各种构造函数,而不是编写模板类。或者,如果要进行赋值操作,可以使用std::copy
并使用std::back_inserter
将项目插入新向量中。 - PaulMcKenzie