Einfach nur Template! :D



  • Moinsen.

    Mein Wissen:
    - Templates
    - Template templates (ich find die Namen so löllig 😃 )
    - Variadic Templates
    - Template specialization
    - um sich nunmal kurz zu fassen: Buch "C++ Templates The Complete Guide" gelesen und verstanden.

    Nun mal sachlich: In meiner gesamten Programmierlaufbahn hat mich das Thema mit Templates am meisten fasziniert. Meine eigentliche Frage ist, ob es noch mehr zu dem Thema gibt? Wenn ich spontan "C++ Templates" google, finde ich maximal Dokus zu den oben genannten Punkten, deshalb geh ich davon aus, dass es das war, oder etwa nicht? Oftmals habe ich in Chats / Foren / erfahrenen Studenten (zumindest erfahrener als ich) gehört / gelesen, dass das Thema "Templates" so groß sei, dass es die Hälfte, oder quasi die Hälfte des gesamten C++'es umfasst. Ist das wahr? Wenn ja, dann kann es das doch unmöglich schon gewesen sein! 😮

    Also wenn das stimmen soll, würde ich sehr gerne mehr dazu lesen 🙂
    Gibt es vielleicht noch andere Bücher dazu (wenn ja, dann sollte es den Umfang des Buches "C++ Templates The Complete Guide" jedoch sprengen ~[kurz gesagt: ich will mehr]~)

    Der Name "The Complete Guide" sagt mir jedoch irgendwie, dass es das schon war.

    Wenns das schon war: Schade, das Thema "Templates" zu erlernen hat mir riesen großen Spaß bereitet.
    Wenn nicht: Bitte auflisten! 😋

    Ansonsten wenns (abgesehen von SFINAE) noch weitere tolle Idiome gibt, wo die intensive Benutzung von Templates verlangt wird, wäre ich dankbar wen du mir einfach nur den Namen des jeweiligen Idioms nennen könntest (Googeln ist nunmal kein Beinbruch). Folgende Idiome hab ich schon durch, brauch also nicht mehr genannt zu werden.

    Wie sehr hoffe ich auf ein "Ja, es gibt noch mehr dazu", seien es Idiome mit wie gesagt intensiver Benutzung von Templates oder gar Themen von denen ich noch gar nichts wusste.

    Hauptsache Templates 😃

    Grüße.



  • Template-Metaprogramming?

    Ich lass mal http://www.boostpro.com/mplbook/ da.



  • Schau dir erst einmal C++11 mit den variadic Templates an. Das alte TMP ist dadurch teilweise überholt.

    Zum Spielen sind dir keine Grenzen gesetzt, allerdings ist der Realitätsbezug immer etwas fraglich: http://www.c-plusplus.net/forum/291117



  • seldon schrieb:

    Ich lass mal http://www.boostpro.com/mplbook/ da.

    *sich den Buchnamen auf die Handfläche schreib und sich artig bedank*

    MPLTMP schrieb:

    Schau dir erst einmal C++11 mit den variadic Templates an. Das alte TMP ist dadurch teilweise überholt.

    Zum Spielen sind dir keine Grenzen gesetzt, allerdings ist der Realitätsbezug immer etwas fraglich: http://www.c-plusplus.net/forum/291117

    An C++11 hab ich mich schon längst geklammert, ohne den 11er Standard macht C++ imho keinen Spaß mehr (bin jetzt schon auf den hoffentlich 17er Standard gespannt :p ) ~muss noch etwas an meiner Geduld feilen~
    Danke für den Link sieht schonmal recht interessant aus 😃

    *wink und sich nochmals bedank*



  • Nun, Konzept ist eine Sache, es einzusetzen eine andere. Du kannst dir gern Metaprogrammierung in anderen Sprachen ansehen und es mit Hilfe C++ Templates in C++ realisieren.



  • malSoMalSo schrieb:

    Nun mal sachlich: In meiner gesamten Programmierlaufbahn hat mich das Thema mit Templates am meisten fasziniert.

    Evtl solltest Du Dir einen Zauberwürfel zulegen und mit Templates bescheiden bleiben.

    malSoMalSo schrieb:

    Meine eigentliche Frage ist, ob es noch mehr zu dem Thema gibt?

    Hab Dein Buch nicht, und weiß´daher nicht, was es alles behandelt. Vielleicht gefallen Dir [url=http://www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/exprtmpl.html]Expression Templates[/quote].



  • volkard schrieb:

    Hab Dein Buch nicht, und weiß´daher nicht, was es alles behandelt.

    Das Buch "C++ Templates: The Complete Guide" ist klasse! Es geht da primär um die Regeln und das, was der Compiler aus den Templates macht. In zwei Stufen bekommt man das erklärt: Erst ein Überblick und dann all die Details. Danach wird gezeigt, was man mit Templates alles so Design-technisch anstellen kann. Expression Templates und "Meta-Programme" kommen dabei genauso dran wie Traits, "Policies", Schlauzeiger, etc. Im Angang wird nochmal die One-Definition-Rule und die Überladungsauflösung auseinandergepflückt. Alles sehr zu empfehlen. Mir hat es jedenfalls viel gebracht, nachdem ich Stroustrup's TC++PL und Meyers' Effective C++ vershclugen hatte. Es gehört definitiv zu den Büchern, die ich empfehle, wenn jemand tiefer in das Template-Thema einsteigen will.

    Das Buch Modern C++ Design von Alexandrescu hat mir auch das eine oder andere gezeigt -- Typ-Listen fand ich abgefahren -- aber im Nachhinein empfand ich das eher als Spielerei als etwas, was man wirklich gebrauchen kann. Und "Policy-based design" verdient IMHO keinen solchen besonderen Namen. Das ist einfach "normale" generische Programmierung.

    Diese Metaprogrammierungsbücher kenne ich nicht. Sie interessieren mich ehrlich gesagt auch nicht besonders. Ich weiß, dass, wenn ich sowas mal brauchen sollte, ich mir die Doku von Boost.MPL angucken kann. Das müsste eigentlich reichen.

    @malSoMalSo: Ich kann dir da leider nichts weiter empfehlen. Vielleicht magst du ja "Elements of Programming" von Stepanov. Es gibt viele, die das gut fanden. Mich langweilte das aber etwas und ich habe nach der Hälfte aufgegeben. Dort stehen jedenfalls Konzepte im Vordergrund und weniger die Sprachmittel (C++ Templates), mit denen sich generische Programmierung umsetzen lässt. Wenn du wissen willst, wie sich C++ möglicherweise in Sachen generische Programmierung entwickeln wird, würde ich an Deiner Stelle mir mal die relevanten Papiere reinziehen, die das Standardisierungskommitee anbietet, siehe open-std.org und/oder isocpp.org.



  • volkard schrieb:

    Evtl solltest Du Dir einen Zauberwürfel zulegen und mit Templates bescheiden bleiben.

    Das klingt schon fast, als würdest Du denken, dass ich für jede 10te Zeile Code krampfhaft nach einer Lösung mit Templates suchen würde.
    Zugegeben, so komme ich in der Tat auch rüber, so ists jedoch nicht, ich versuche sie sogar in meinen Programmen zu vermeiden, aber sobald es die Sache einfach nur "einfacher" macht (z.b. bei einer beliebigen Anzahl an Parametern) oder sonst wo Sinn ergibt, greife ich (sogar mit großer Freude :D) in die TMP-Kiste.

    In C z.B. habe ich mit Preprozessoren minimale Template-Features eingebaut (einen einzigen Template-Parameter für Strukturen und Funktionen konnte ich übergeben [ohne #define benutzen zu müssen]), wobei die Syntax jedoch so f***ing ugly war, sodass ich den Preprozessor-Code in die Ecke schmiss, und mich wieder nach was anderem gewandt hab 😃

    Zum Beispiel nach ner neuen filestream Klasse, wobei ich zwei Methoden read() und write() so definiert habe, dass sie jeden Build-In Typen, eigene Klassen die ebenfalls read() & write() Funktionen besitzen und quasi jeden STL-Container (de)serialisieren kann. Gelöst hab ich das mit SFINAE und - o wunder - Variadics.

    Jaja, ich weiß, boost bietet da noch einiges mehr, aber trotzdem macht es Spaß sowas mit Templates zu realisieren, wobei es ohne garnicht möglich gewesen wäre. (im Sinne von file.write(<wasUndWieVieleWerteOderKlassenDuAuch(De)serialisierenWillst>) )

    Letzteres sieht ungf. so aus (ist aber noch nicht ganz fertig)

    Fazit: Mit Templates zu hantieren macht mir halt im Moment unheimlich viel Spaß, gehe wie gesagt in meinen Projekten (außer im Projekt "tmp-exercise" ;D) so sparsam wie möglich damit um, und letztendlich könnten mich keine 50 Pferdelasagnen dazu bringen meine Templates durch nen Zauberwürfel zu ersetzen 😃

    Und danke für den Link, den werd ich mir auch bookmarken. Kennen tu ich es schon, jedoch ist 3mal lesen besser als einmal 🙂

    knivil schrieb:

    Nun, Konzept ist eine Sache, es einzusetzen eine andere.

    👍
    Üben, üben, üben, lesen, lesen, üben 😃



  • krümelkacker schrieb:

    @malSoMalSo: Ich kann dir da leider nichts weiter empfehlen. Vielleicht magst du ja "Elements of Programming" von Stepanov. Es gibt viele, die das gut fanden. Mich langweilte das aber etwas und ich habe nach der Hälfte aufgegeben. Dort stehen jedenfalls Konzepte im Vordergrund und weniger die Sprachmittel (C++ Templates), mit denen sich generische Programmierung umsetzen lässt. Wenn du wissen willst, wie sich C++ möglicherweise in Sachen generische Programmierung entwickeln wird, würde ich an Deiner Stelle mir mal die relevanten Papiere reinziehen, die das Standardisierungskommitee anbietet, siehe open-std.org und/oder isocpp.org.

    Hmhm. Jo, die STD-Dokus könnt ich mir auch echt mal ankucken. Werds mir hinter die Ohren schreiben 🙂
    Danke Dir und nochmals allen für die Tipps 👍



  • Vielleicht kennst Du den Link schon - falls nicht, ist C++Next auf jeden Fall was für Dich. Mir persönlich hat am besten die Reihe Expressive C++ von Eric Niebler gefallen.



  • Werner Salomon schrieb:

    Vielleicht kennst Du den Link schon - falls nicht, ist C++Next auf jeden Fall was für Dich. Mir persönlich hat am besten die Reihe Expressive C++ von Eric Niebler gefallen.

    Ich gestehe: Als ich mal durch die Boost-Docs geblättert habe, und das erste mal die Verwendung von Boost.Spirit gesehen habe, fiel ich fast vom Hocker. Aber ich werds mir auch auf die Liste schreiben, da ich (mit Leidenschaft) auch gerne Parser jeglicher Art schreibe, z.b. Descent Recursive Parser für nen Calculator, nen Interpreter für ein minimales Lisp, heute morgen eben nen BF-Interpreter mit ANSI C gebaut und auch einen beschissenen, aber funktionierenden XML-Parser hab ich schonmal hinbekommen! 😃
    Auf jeden Fall empfinde ich die von Dir geposteten Links als wichtiges Material für meine Zukünfte und werde sie nicht vernachlässigen.

    Uuuuund nochmals: Dankeschön an Dir und nochmals an allen anderen. ~Ich kann mich nicht oft genug bedanken :D~



  • malSoMalSo schrieb:

    Zum Beispiel nach ner neuen filestream Klasse, wobei ich zwei Methoden read() und write() so definiert habe, dass sie jeden Build-In Typen, eigene Klassen die ebenfalls read() & write() Funktionen besitzen

    Eigene Klassen, die Konstruktor und write besitzen, hoffe ich. Dürfte schneller sein und es wird kein Standardkonstruktor erzwungen.



  • volkard schrieb:

    malSoMalSo schrieb:

    Zum Beispiel nach ner neuen filestream Klasse, wobei ich zwei Methoden read() und write() so definiert habe, dass sie jeden Build-In Typen, eigene Klassen die ebenfalls read() & write() Funktionen besitzen

    Eigene Klassen, die Konstruktor und write besitzen, hoffe ich. Dürfte schneller sein und es wird kein Standardkonstruktor erzwungen.

    Klassendeklaration (Falls es dich interessiert)

    Nimm mir das namespace std{...} nicht übel, es handelt sich hier um ein Projekt namens "mystd" das als eine Art Schablone dient, und auch nicht allzu auffallen soll, deswegen der namespace.

    Das Projekt "mystd" behinhaltet auch noch folgende Header:
    - after_return.hpp
    - environment.hpp
    - directory.hpp
    - io.hpp
    - menu.hpp
    - wrapper.hpp
    - sfinae.hpp
    - memory.hpp
    - zlib.hpp

    Tut mir Leid, dass ich so vom Thema abweiche, aber ich liebe halt Coding und Diskussionen darüber allgemein. Code-Suchti halt.
    \o


Log in to reply