Metti che operatore all'interno della vostra definizione di classe. Deve essere un membro perché operator=
è speciale e non si otterrebbe qualcosa scrivendolo comunque come non membro. Un operatore non membro ha due importanti vantaggi principali:
- conversioni implicite del diritto e il lato sinistro dell'operatore invocazione
- Non c'è bisogno di conoscere interni della classe. La funzione può essere realizzata come non-membro non-amico.
Per operator=
, entrambi non sono utilizzabili. Assegnare a un risultato temporaneo di una conversione non ha senso, e nella maggior parte dei casi sarà necessario l'accesso a internals operator=
. Inoltre, uno speciale operator=
viene fornito automaticamente da C++ se non ne viene fornito uno (il cosiddetto operatore di copia-assegnazione). Rendere possibile sovraccaricare operator=
come non membro avrebbe introdotto una complessità aggiuntiva per apparentemente nessun guadagno pratico, e quindi non è permesso.
Quindi modificare il codice in modo che assomiglia a questo (. Questo presuppone l'operator=
è non un operatore di copia-assegnazione, ma assegnando da una list<T>
a qualcos'altro Questo non è chiaro dalla tua domanda):
class MyClass {
...
template<class T>
MyClass& operator=(const list<T>& lst)
{
clear();
copy(lst);
return *this;
}
...
};
È piuttosto normale che uno operator=
restituisca nuovamente un riferimento a se stesso. Ti raccomando di aderire a questa pratica. Sembrerà familiare ai programmatori e potrebbe causare sorprese se restituisse lo void
all'improvviso.
fonte
2009-05-15 23:44:32
In che contesto si trova? classe? A livello superiore? – bdonlan
Non ha davvero bisogno della lingua nella domanda nome poiché è anche codificata C++ –
Questa domanda è ingannevole. La domanda [qui] (https://stackoverflow.com/questions/5037156/) è più interessante. Anche se la migliore formulazione sarebbe "Perché non posso operator = essere globale". La risposta di Johannes Schaub - litb lo chiarisce. –