Ponga ese operador dentro de la definición de clase. Debe ser un miembro porque operator=
es especial y de todos modos no ganarías nada escribiéndolo como no miembro. Un operador que no sea miembro tiene dos importantes ventajas principales:
- conversiones implícitas de la derecha y el lado izquierdo de la invocación del operador
- No hay necesidad de saber sobre elementos internos de la clase. La función se puede realizar como no miembro no amigo.
Para operator=
, ambos no se pueden utilizar. Asignar a un resultado temporal de una conversión no tiene sentido, y operator=
necesitará acceso a las partes internas en la mayoría de los casos. Además, C++ proporciona automáticamente un operator=
especial si no proporciona uno (el llamado operador de copia de asignación). Posibilitar sobrecargar operator=
como no miembro habría introducido una complejidad adicional para aparentemente ninguna ganancia práctica, y eso no está permitido.
Así que cambiar su código para que se parezca a esto (., Esto supone la operator=
es no un operador de copia de asignación, pero la asignación de un list<T>
a otra cosa Esto no es claro por su pregunta):
class MyClass {
...
template<class T>
MyClass& operator=(const list<T>& lst)
{
clear();
copy(lst);
return *this;
}
...
};
Es bastante normal que un operator=
devuelve una referencia a sí mismo de nuevo. Te recomiendo que te apegues a esa práctica. Será familiar para los programadores y podría causar sorpresas si devuelve void
de repente.
qué contexto es esto en? en el clase? En toplevel? – bdonlan
Realmente no necesita el lenguaje en el nombre de la pregunta ya que también está etiquetado C++ –
Esta pregunta es engañoso. La pregunta [aquí] (https://stackoverflow.com/questions/5037156/) es más interesante. Aunque la mejor redacción sería "¿Por qué no puede operador = ser global". La respuesta de Johannes Schaub - litb aclara eso. –