下面的函数将存储在类中的内容转换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>''
我不确定这里出了什么问题,我希望有人可以提供帮助/解释.
您定义的赋值运算符实际上是用于将cVector转移到另一个cVector,而不是转换为std::vector,这是您想要的.
您正在寻找的是重载转换运算符:
operator std::vector< T >() const { ... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |