下面的函数将存储在类 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;
然后在编译过程中出现以下错误:
error: conversion from 'cVector' to non-scalar type 'std::vector >' requested"
我不确定这里出了什么问题,希望有人能帮助/解释。
最佳答案
您定义的赋值运算符实际上是用于将一个 cVector 赋值给另一个 cVector,而不是转换为 std::vector
,这正是您想要的。
您正在寻找的是重载 conversion operator :
operator std::vector< T >() const { ... }
关于c++ - 重载赋值运算符以返回 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45322982/