Einführung in die Programmierung mit Templates



  • Was willst du überhaupt machen? Die Methode setElement für int spezialisieren?



  • Richtig. Genau das. Ich weiß, dass das schwachsinnig ist, aber irgendwie muss ich das ja ausprobieren nur klappt das nicht...

    /edit by GPC: nick gekürzt



  • Na ja, mir fehlt etwas der konkrete Anwendungsfall, aber wenn du z.B. den Code ausführst:

    //hier dein Code
    
    int main() {
      MyClass<float> fc;
      fc.setElement(2.5f);
      fc.setElement(2);
    }
    

    dann gibt's folgende Ausgabe:

    gpc@desktop:~$ g++ -o main main.cpp
    gpc@desktop:~$ ./main
    [Typ]NewElement: ???
    [Typ]NewElement: int
    

    Btw. Bitte verwende einen kürzeren Nick. Danke 🙂

    MfG

    GPC



  • So habe ich aber keine Spezialisierung sondern nur eine normale Überladung. Kann doch nicht richtig sein?



  • Stimmt, das ist Überladung. Da du aber ein Klassentemplate hast, kannst du auch nur das spezialisieren (partiell oder vollständig). D.h. entweder die Überladung oder du machst es so:

    //Generisch:
    template <typename T>
    struct Foo {
      T bar;
    
      void set_bar(const T &x) { bar = x; }
      const T& get_bar() const { return bar; }
    };
    
    //Für ints:
    template <>
    struct Foo<int> {
      //hier spezialisierte Versionen der Methoden von oben
    };
    

    Damit hast du allerdings die Klasse spezialisiert.

    Template-Methoden spezialisieren geht auch, aber dann brauchst du template-Methoden.



  • btw, SFINAE steht für substitution failure is not an error



  • Magst du evtl noch die Syntax für Template-friend-Deklarationen mit reinnehmen? Solche speziellen Sachen vergess ich immer, brauch's ja auch fast nie 🙂 edit: Hier meine ich template<typename[,...]> friend class XYZ;
    Achso, und magst du vielleicht auch noch mal explizit reinschreiben, dass es keine partiell spezialisierten Funktionen gibt? Hatte neulich vergessen, dass es nur mit Klassen geht und mir 'nen Wolf gesucht 😃



  • Kann ich machen, aber nach der Klausurphase...


Anmelden zum Antworten