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...