2011-08-09 19 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) 
{ ... } 

Supongo que el caso es correcto.operador de sobrecarga = dentro de la clase de plantilla

Pregunta> ¿Por qué no tenemos que utilizar ClassA<T> en la lista de parámetros de función, como en el caso de dos?

+0

1, porque se da a entender. – iammilind

+0

Me han dicho que "hay que especificar los parámetros de plantilla para el nombre de una plantilla de clase, excepto dentro del alcance de la propia clase. Aquí el parámetro de función no está dentro del alcance de classA, así que pensé que debe utilizar el caso dos en vez de uno." – q0987

+0

@iammilind: ¿vota por la implícita? –

Respuesta

0

Queda implícito cuando está en el alcance parámetro de la función (pero no en el tipo de retorno). Ver también usar clases anidadas como un tipo de parámetro.

2

Como se ha visto, ya sea la versión funcionará.

Una vez que hemos pasado la parte ClassA<T>:: de ClassA<T>& ClassA<T>::operator=(const ClassA& rhs) se comporta como si estuviéramos dentro de la clase. Por ejemplo, el operador puede acceder a todos los miembros de la clase.

Usted tiene que especificar el nombre completo para el valor de retorno, porque en ese momento todavía no sabemos que se trata de una función miembro (o el operador).

Cuestiones relacionadas