以下の関数は、クラス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'を使って既に可能です(より良い方法で実装されている可能性が高いです)。 –