2016-05-26 10 views
-1

Überlastung Wenn ich eine Klasse mit einem überladenen Zuweisungsoperator wie diese:eine Operation außerhalb einer Template-Klassen

template<typename T> class Foo { 
private: 
    T var; 
public: 
    T operator=(T v){var = v;}; 
}; 

es funktioniert, aber wenn ich den Bediener außerhalb der Klasse definieren will es mir sagt, T ist kein Typ (worüber es richtig ist). Wie kann ich das umgehen und außerhalb der Klasse definieren?

+1

'template T Foo :: operator = (T v) { var = v; } ' –

+0

@sleeptightpupper Auch wenn das OP den Rückgabetyp als' T' anstelle von 'Foo &' behält, müsste die Implementierung etwas zurückgeben. –

+1

Bitte geben Sie eine [mcve] an. "Es verursacht viel Aufhebens" ist keine ausreichende Information für uns zu diagnostizieren, was Sie falsch gemacht haben. – Barry

Antwort

0

definieren Sie es außerhalb der Klasse wie folgt:

template<typename T> 
Foo<T>& Foo<T>::operator=(T v) 
// Note the Foo& that was added (it needs to be added to the declaration too) 
// This is the idiomatic way to implement the assignment operator 
{ 
    var = v; 
    return *this; 
} 
+1

Sollte es nicht 'Foo &' zurückgeben? – immibis

+0

@immibis Ja, natürlich. Guter Fang. Die Antwort wurde korrigiert. –