2011-08-09 65 views
5
template<typename T> ClassA 
{ 
    ... 
    ClassA& operator=(const ClassA&); 

    ... 
}; 

// case one: 
template<typename T> 
ClassA<T>& ClassA<T>::operator=(const ClassA &rhs) 
{ ... } 

// case two: 
template<typename T> 
ClassA<T>& ClassA<T>::operator=(const ClassA<T> &rhs) 
{ ... } 

我假定案例一是正确的。超载运算符=内部模板类

问题>为什么我们不必在功能参数列表中使用ClassA<T>,比如情况二?

+0

+1,因为它是隐含的。 – iammilind

+0

我被告知“我们必须为类模板的名称指定模板参数,除了类本身的范围内。这里函数参数不在类A的范围内,所以我认为我们必须使用第二种情况一个“。 – q0987

+0

@iammilind:你因为隐含而投票吗? –

回答

0

它在函数参数范围内(但不在返回类型中)暗示。另请参阅使用嵌套类作为参数类型。

2

正如你所见,任何一个版本都可以工作。

一旦我们通过了ClassA<T>& ClassA<T>::operator=(const ClassA& rhs)ClassA<T>::部分,它的行为就好像我们在课堂上一样。例如,操作员可以访问该班级的所有成员。

你必须指定返回值的全名,因为那时我们还不知道这是一个成员函数(或操作符)。