2011-08-09 8 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

"클래스 템플릿 범위 내에서 클래스 템플릿의 이름에 템플릿 매개 변수를 지정해야합니다. 여기서 function 매개 변수는 classA의 범위 안에 있지 않으므로 대신 케이스 2를 사용해야한다고 생각했습니다. 하나의. " – q0987

+0

@ iammilind : 암묵적인 이유 때문에 투표 하시겠습니까? –

답변

0

기능 매개 변수 범위에 있지만 (반환 유형에는없는 경우) 의미합니다. 중첩 클래스를 매개 변수 유형으로 사용을 참조하십시오.

2

본 것처럼 두 버전 중 하나를 사용할 수 있습니다.

ClassA<T>:: 부분이 ClassA<T>& ClassA<T>::operator=(const ClassA& rhs)이되면 우리가 클래스 내부에있는 것처럼 동작합니다. 예를 들어, 운영자는 클래스의 모든 멤버에 액세스 할 수 있습니다.

반환 값의 전체 이름을 지정해야합니다. 그 시점에서 우리는 여전히 멤버 함수 (또는 연산자)인지 모르기 때문입니다.