所以我在使用模板时遇到了重载赋值操作符的问题。基本上,我正在使用一个自定义的可调整大小的数组类,并且这是由不能调整大小的不同数组类继承的。无论如何,我有两个相等运算符,一个用于处理相同大小的数组,另一个用于处理不同大小的数组,只要类型相同。使用模板重载操作符
下面是运营商代码:
// 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