Zuweisungsoperator für Templateklasse - Syntax?
-
Hab schon gegoogelt, bekomm das aber nicht hin:
template <class T> class Nerv { private: template <class T> Nerv<T>& Nerv<T> ::operator=(const Nerv<T>& c) { return (this*); } };'=': Unzulässiger vollständig angegebener Name in Elementdeklaration
oder je nachdem wie man es macht und welchen Compiler man nimmt
error: expected primary-expression before ';' token

-
so?
template<class T> class test { public: test<T>& operator=(test<T>& Obj) { //... } };
-
Shit, wie dumm von mir

-
Delryn schrieb:
template <class T> Nerv<T>& Nerv<T> ::operator=(const Nerv<T>& c)Das ist nicht korrekt, da der Template Parameter T ja bereits existiert. GCC spricht hier zB von Shadow Template Parameter.
Innerhalb deiner Klasse ist Nerv ein Synonym für Nerv<T>. Es reicht also folgendes vollkommen aus:Nerv& Nerv::operator=(const Nerv& c)Falls du einen anderen Template Parameter verwenden willst, musst du einen anderen Namen angeben, zB
template <class T2> Nerv<T2>& Nerv<T2> ::operator=(const Nerv<T2>& c)
-
groovemaster schrieb:
Falls du einen anderen Template Parameter verwenden willst, musst du einen anderen Namen angeben, zB
template <class T2> Nerv<T2>& Nerv<T2> ::operator=(const Nerv<T2>& c)Hierbei aber nicht vergessen, dass ein solcher Template-Zuweisungsoperator niemals als Default-Zuweisungsoperator angesehen wird. Bei:
Nerv<int> a, b; a = b;wird also niemals der Template-Zuweisungsoperator aufgerufen.
Wer also einen Template-Zuweisungsoperator schreibt, sollte in der Regel auch einen "normalen" Zuweisungsoperator implementieren. Oder zumindest sicher sein, dass die vom Compiler generierte Version das Richtige tut.