下面的函数将存储在类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;'请“
我不确定这里出了什么问题,我希望有人可以提供帮助/解释。
答案 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
功能。