所以我在使用模板時遇到了重載賦值操作符的問題。基本上,我正在使用一個自定義的可調整大小的數組類,並且這是由不能調整大小的不同數組類繼承的。無論如何,我有兩個相等運算符,一個用於處理相同大小的數組,另一個用於處理不同大小的數組,只要類型相同。使用模板重載操作符
下面是運營商代碼:
// operator =
//
template <typename T, size_t N>
const Fixed_Array <T, N> & Fixed_Array <T, N>::operator = (const Fixed_Array <T, N> & rhs)
{
for(size_t x = 0; x < N; x++)
{
this->set(x, rhs[x]);
}
return *this;
}
//
// operator =
//
template <typename T, size_t N>
template <size_t M>
const Fixed_Array <T, N> & Fixed_Array <T, N>::operator = (const Fixed_Array <T, M> & rhs)
{
this->resize(M);
for(size_t x = 0; x < M; x++)
{
this->set(x, rhs[x]);
}
return *this;
}
而且這裏是我用來創建和分配什麼:
Fixed_Array<char, 10> * fa1 = new Fixed_Array<char, 10>();
Fixed_Array<char, 20> * fa2 = new Fixed_Array<char, 20>();
fa1 = fa1; //works
fa1 = fa2; //causes compiler to freak out
錯誤消息主要是說,我不能這樣做10和20;它並沒有使用模板來獲取我的第二個賦值運算符。
有什麼建議嗎?
我看不出有什麼理由不應該在'Fixed_Array fa1;'(和'fa2'類似)。那麼你可以使用'fa1 = fa2'。就像'int':你不會做'int * p = new int';'沒有*很好的理由,你只會使用'int i;'。 –
2012-02-24 03:46:46