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.


Anmelden zum Antworten