Template-Operatoren



  • Hallo,

    ich versuche gerade eine Template-Klasse zu schreiben, mit den dazugehörigen Operatoren. Leider mache ich irgendetwas falsch und ich weiß nicht was. Dabei habe ich mich schon an Beispielen aus dem Internet orientiert...

    Das hier steht im Header:

    template<class T2>
    class MyTripleList
    {
    public:
    	// ...
    
    	template<class T2>
    	friend bool operator== <>(const MyTripleList<T2>&, const 
    
    private:
            // ...
    };
    

    Und so sieht die Definition in der Quelldatei aus:

    template<class T2> class MyTripleList;
    
    template<class T2>
    bool operator== <>(const MyTripleList<T2>& m, const MyTripleList<T2>& n)
    {
    	cout << "VERGLEICH!" << endl;
            // ...
    	return true;
    };
    

    Aber die Methode wird nie aufgerufen!

    Kann mir jemand sagen warum? (was die eckigen Klammern nach den Operatoren zu bedeuten haben weiß ich auch nicht, aber das macht man wohl so, oder?)



  • Hi,
    es scheint mir, dass du noch nicht allzu viel Erfahrung mit Templates hast und dich mehr auf See&Copy&Paste verlässt. Im Magazin gibts einen Artikel von GPC zum Thema Templates, lies ihn dir am besten durch: http://magazin.c-plusplus.net/artikel/Einf�hrung in die Programmierung mit Templates



  • ichbineinnoob schrieb:

    Kann mir jemand sagen warum? (was die eckigen Klammern nach den Operatoren zu bedeuten haben weiß ich auch nicht, aber das macht man wohl so, oder?)

    Nein, das macht man nicht so - sowas verwendet man nur für Template-Spezialisierungen und dann steht noch etwas zwischen den Klammern.

    PS: Die Forward-Deklaration der Klasse ist unnötig, besonders da du in deinem operator==() die komplette Definition benötigst. Und Templates in eigene Quelldateien zu packen bringt nicht die erwarteten Resultate.


Anmelden zum Antworten