Template Probleme



  • Hallo, ich habe zum Tet eine Klasse geschrieben, die 3 Werte hält.
    Nun möchte ich für diese Klasse den + Operator definieren.

    #include <IOstream>
    using namespace std;
    
    template <class T> class  Punkt3D
    {
    public:
    	T x,y,z;
    public:
    	Punkt3D(T x_,T y_, T z_):x(x_),y(y_), z(z_) 
    	{
    		cout <<"Ich (Punkt3D) werde erzeugt \n";
    	}
    
    	~Punkt3D() 
    	{
    		cout << "Ich (Punkt3D) werde gelöscht \n";
    	}
    
    	void sag_was() 
    	{
    		cout << "Meine Werte sind" << " "<<x << " " << y << " " << z <<"\n";
    	}
    };
    
    //Hier ist das Problem, da das T undefiniert ist
    Punkt3D<T> operator + ( Punkt3D<T> p1,Punkt3D<T> p2) {return Punkt3D(p1.x+p2.x,p1.y+p2.y,p1.z+p2.z);}
    

    Allerdings habe ich nun das Problem, das ja außerhalb der Klasse das T vom Template nicht mehr definiert ist.

    Wie löst man das problem?



  • den operator auch als template implementieren:

    template<class T>
    Punkt3D<T> operator +(Punkt3D<T> p1, Punkt3D<T> p2)
    {
    	return Punkt3D(p1.x+p2.x,p1.y+p2.y,p1.z+p2.z);
    }
    


  • und die Argumente bessert als konstante Referenzen übergeben.



  • Und den Rückgabetyp const machen!
    Und dem Compiler eine NRVO ermöglichen!

    template<class T>
    const Punkt3D<T> operator +(const Punkt3D<T>& p1, const Punkt3D<T>& p2)
    {
    	Punkt3D<T> result(p1.x + p2.x, p1.y + p2.y, p1.z + p2.z);
    	return result;
    }
    


  • phalanx-fanboy schrieb:

    Und dem Compiler eine NRVO ermöglichen!

    Ist imho quatsch. RVO gibt es schon länger als NRVO und dürfte daher von Compilern sogar eher besser unterstützt werden.



  • phalanx-fanboy schrieb:

    Und dem Compiler eine NRVO ermöglichen!

    😃 lol 😃
    Und auf keinen Fall inline Code schreiben, um dem Linker seine Link Time Code Generation zu ermöglichen 😉


Anmelden zum Antworten