Überladung von relationalen Operatoren die template-Klassen als Parameter haben



  • Hallo zusammen.

    Der Titel sagts schon..
    Ich möchte relationale Operatoren(<,>,<=,>=) für ein Template Vector<T> definieren, aber offenbar muss ich diese Operatoren global definieren(kann sie also nicht als "Member-Methoden-Operatoren"(wie auch immer..) definieren).

    so habe ich mir das vorgestellt:

    bool operator< (Vector<T> lhs, Vector<T> rhs)
    

    T ist der Typname..

    Naja, ich weis halt nicht, wie ich der Operator-Überladung jetzt den Typ T übergeben soll..

    Ursprünglich dachte ich, ich könnte diese Operatoren innerhalb der Klasse definieren:

    template<typename T> class Vector 
    {
    bool operator< (Vector<T>& lhs, Vector<T>& rhs);
    };
    

    Eigentlich bin ich ziemlich verwirrt, ist das wirklich so, dass sich relationale operatoren nur "global" überladen lassen? Wieso?
    Könnt ihr mir helfen?


  • Administrator

    template<typename T>
    class Vector
    {
      // ...
      bool operator >(Vector& vector); // lhs ist this, rhs ist vector ;)
    };
    

    Grüssli



  • Also ist das falsch:

    template<typename T> class Irgendwas
    {
    Irgendwas<T> TuWas(Irgendwas<T> weisauchnich);
    };
    

    und müsste so aussehen:

    template<typename T> class Irgendwas
    {
    Irgendwas TuWas(Irgendwas weisauchnich);
    };
    

    ??

    Danke 🙂



  • blubberblub schrieb:

    Also ist das falsch:

    template<typename T> class Irgendwas
    {
    Irgendwas<T> TuWas(Irgendwas<T> weisauchnich);
    };
    

    und müsste so aussehen:

    template<typename T> class Irgendwas
    {
    Irgendwas TuWas(Irgendwas weisauchnich);
    };
    

    ??

    Danke 🙂

    Nö, is beides genau dasselbe. Steht im Standard auch recht schön beschrieben warum die 2. Form erlaubt ist und überhaupt.


Anmelden zum Antworten