wofür templates?
-
wofür braucht man eigendlich template-klassen oder funktionen?
Hab sowas in meinen Programmen noch nie gebraucht...
Hab ich was verpasst?
-
ich brauch auch templates ziemlich selten. In meinem aktuellen Projekt, dass zZ. schon ca 20 Klassen hat, sind 3 Klassen Template Klassen, eine davon ist ein fixed_vector und die anderen beiden dienen dazu Objekte im Shared Memory zu verwalten.
Templates lohnen sich immer dann, wenn du A) etwas schreibst, was du mit verschiedenen Datentypen machen willst (fixed_vector zB.) oder
du 2 Konzepte trennen willst (strings und der verwendete char Typ)
-
Außerhalb von Libraries sind templates denke ich selten anzutreffen. Wenn du also immer nur Programme schreibst, dann brauchst du auch nur sehr selten templates.
-
Hab mir schon fast gedacht das sich sowas nur in Sonderfällen lohnt
-
Außerhalb von Libraries sind templates denke ich selten anzutreffen. Wenn du also immer nur Programme schreibst, dann brauchst du auch nur sehr selten templates
Die Aussage halte ich für vergleichbar mit:
Außerhalb von Libraries ist OOP denke ich selten anzutreffen. Wenn du also immer nur Programme schreibst, dann brauchst du auch nur sehr selten OOP
und damit für falsch.
Mal abgesehen davon, dass das mit dem "brauchen" immer so eine Sache ist, sehe ich nicht, warum die Vorteile der generische Programmierung und der statischen Polymorphie nur in Bibliotheken relevant sein sollten. Natürlich treten sie dort (genau wie bei der OOP) besonders stark hervor, aber
auch in Anwendungscode kann man die neue gewonne Flexibilität und Vielfalt sicher gut gebrauchen.Vielleicht müssen allerdings erst noch viel mehr C++ Programmierer Bücher wie "Modern C++ Design" oder "Multi-Paradigm Design for C++" lesen, bevor man mehr Templates in Anwendungscode sieht.
Ich für meinen Teil verwende eigentlich irgendwo immer Templates (genauso wie ich irgendwo immer Klassen verwende). Allerdings eher selten im Container-T-Sinne sondern mehr zum Aufbohren von irgendwelchen Design-Patterns.
-
Original erstellt von HumeSikkins:
Die Aussage halte ich für vergleichbar mit:
Außerhalb von Libraries ist OOP denke ich selten anzutreffen. Wenn du also immer nur Programme schreibst, dann brauchst du auch nur sehr selten OOP
und damit für falsch.Ne. Ich verwende in meinem Programm nur ein einziges mal templates. Und zwar in template<class T> class matrix; Aber da ich deine ganzen komischen Mode-Begriffe nich kenne, kann ich da ja nich mithalten ^^...
[ Dieser Beitrag wurde am 02.06.2003 um 22:30 Uhr von Mr. N editiert. ]
-
HumeSikkins...du hast ja auch keine Ahnung von 'echter' Programmierung.
-
was für ein intelligenter beitrag. zum glück bist du unregistriert
-
meine meinung zu templates:
Ich denke, wenn man sie zu nutzen weiss - OK
Seit dem ich in die Profiprogrammierung eingestiegen bin, habe ich hauptsächlich mit MFC und DirectX7 (ja man staune nicht 8 oder 9 nein 7) zu tun, und habe dort noch nicht ein einziges template gecodet.
der erfinder des templates hat sicher einen tieferen sinn in diesen dingern gesehen, denn ich möglicherweise (wie viele andere) nicht wirklich einzusetzen wissen.
aber !
happy coding !
-
HumeSikkins...du hast ja auch keine Ahnung von 'echter' Programmierung.
Das würde ich niemals bezweifeln. Allerdings versuche ich *jeden* Tag mir ein winzig kleines bischen mehr Wissen anzueignen. Dabei stolpere ich dann häufig über sehr interessante Ideen die hier dann lustigerweise einfach als "Modewörter" abgetan werden ohne das sich derjenige die Mühe macht sich wenigstens mal zu informieren.
Ich bin wirklich lieber jemand der keine Ahnung hat, das weiß und versucht dies Stück für Stück zu ändern, als jemand der meint er hätte schon alles gesehen und alles was er nicht kennt als schwachsinn abtut.
Aber da ich deine ganzen komischen Mode-Begriffe nich kenne, kann ich da ja nich mithalten ^^...
Bisher habe ich noch keinen Begriff geprägt. Und eine Mode konnte ich bisher auch noch nicht etablieren.
Und was meinst du mit mithalten? Ist das hier für dich irgendwie ein persönlicher wettstreit?Nur für den Fall, dass du dich angesprochen fühltest. Meine Aussage
Vielleicht müssen allerdings erst noch viel mehr C++ Programmierer Bücher wie "Modern C++ Design" oder "Multi-Paradigm Design for C++" lesen, bevor man mehr Templates in Anwendungscode sieht.
bezog sich nicht auf dich.
Meine Erfahrung ist nur, dass Template-Wissen noch nicht so verbreitet ist. Ein gutes Beispiel ist z.B. der wirklich schlechte c't-Artikel "Generische Programmierung für bessere Wiederverwendbarkeit" von Dr. Markus Mohnen.
-
Bisher habe ich noch keinen Begriff geprägt. Und eine Mode konnte ich bisher auch noch nicht etablieren.
Und was meinst du mit mithalten? Ist das hier für dich irgendwie ein persönlicher wettstreit?Ne. Du verwirrst mich nur mit den 10000 Paradigmen die du benennst. Da muss ich doch zurückflamen!
bezog sich nicht auf dich.
Meine Erfahrung ist nur, dass Template-Wissen noch nicht so verbreitet ist. Ein gutes Beispiel ist z.B. der wirklich schlechte c't-Artikel "Generische Programmierung für bessere Wiederverwendbarkeit" von Dr. Markus Mohnen.Gut. Denn ich weiß wie man C++ templates wirklich benutzt. Nur manchmal ist normale Polymoprhie eben geeigneter. Und in meinem aktuellen Code bevorzuge ich eben diese Polymorphie. (Der Code ist übrigens in höchstem Maße rekursiv *g*)
-
Ich liebe Templates, und verwende sie eigentlich ganz gern. Ok - es ist auch nicht alles Template bei mir. Muß auch nicht, nur wenn ich sie für Sinnvoll erachte.
Das war vor einem Jahr auch noch nicht so, aber z.B. Singletons ohne Template? Nein Danke.
Mathe stuff, wie Vector und Matrix -> Template, schon weil dieses Unroll the Loop da ohne Problem vom Compiler erledigt wird. Dazu noch Template Metaprogramming.
Handles? Na Template, weil sie sonst nicht Typesafe sind. Ich möchte nicht für Texture und Particle ... einen eigenen Handle Manager und Handle Code schreiben. Da ist doch Handle< SingleTexture > oder so besser.
Naja - es gibt noch 100 Nützliche Beispiele.
P.s. Mr N - das von Humme war sicher kein Angriff auf dich. Du brauchst also nicht zurückflamen. Außerdem hat er doch keine komischen Modebegriffe verwendet.
-
Ich liebe Templates, und verwende sie eigentlich ganz gern. Ok - es ist auch nicht alles Template bei mir. Muß auch nicht, nur wenn ich sie für Sinnvoll erachte.
Das war vor einem Jahr auch noch nicht so, aber z.B. Singletons ohne Template? Nein Danke.
Mathe stuff, wie Vector und Matrix -> Template, schon weil dieses Unroll the Loop da ohne Problem vom Compiler erledigt wird. Dazu noch Template Metaprogramming.
Handles? Na Template, weil sie sonst nicht Typesafe sind. Ich möchte nicht für Texture und Particle ... einen eigenen Handle Manager und Handle Code schreiben. Da ist doch Handle< SingleTexture > oder so besser.
Naja - es gibt noch 100 Nützliche Beispiele.
Ich mag templates auch.
P.s. Mr N - das von Humme war sicher kein Angriff auf dich. Du brauchst also nicht zurückflamen. Außerdem hat er doch keine komischen Modebegriffe verwendet.
Meine Worte heißen nicht immer das wörtlich. using MrN::decrypt; kann ich dir nur empfehlen ;)!
-
also den humor von Mr. N habe ich leider nicht verstanden, und wenn es kein humor gewesen sein soll, dann hab ichs noch weniger verstanden.
ich muss sagen das ich mit templates auch noch nicht viel gemacht habe, eigentlich nur da wo die aufgabenstellung in meinem studium es direkt geforder haten. ich denke das sie ja nuetzlich sein moegen, aber doch, zumindestens da wo es moeglich ist, durch das verwenden von polymorphie abgeloest werden, da man diese in jeder Objekt orientierten sprache verwenden kann, was bei templates ja nicht der fall ist.
wenn also jemand als erstes java lerrnt ist er es gewohnt alles in klassen zu stecken, nicht in templateklassen. und wird dies wohl aus gewohnheit bei sprachen die mehr moeglichkeiten bereitstellen verwenden.
-
Kann man Templates eigentlich nicht fast immer mit OOP ersetzen? Ich kenn mich nicht wirklich mit Templates aus (nur das Grundlegende) , aber zum Beispiel bei Container-Klassen wie Vector kann man ja anstatt das ganze zu templatisieren, auch einfach ein Objekt einer Wurzelklasse als Elementtyp verwenden, in das Objekte von Subklassen dann auch reinpassen (wenn es eine Basis-Wurzel für alle Klassen gibt und die Sprache reinobjektorientiert ist, kann man dann alles in den Vecotr reintun) Naja, was ich mal von den Template-Freaks gern wissen würd, was (konkret) kann man wirklich nur mit Templates machen, was nicht durch OOP ersetzbar wäre (wenn die Sprache reinobjektorientiert ist und keinerlei primitive Datentypen hat) ?
-
Also man kann Template-Rekursionen machen die allerdings je nach Tiefe sehr viel Compilerzeit in Anspruch nehmen. Desweiteren braucht man Templates wenn man eine Klasse hat aber eigentlich viele Klassen mit der selben Funktionalität für verschiedene Typen etc. braucht...
Bsp: Matrix<int>, Matrix<string>, matrix<char> werden vom Compiler wie 3 verschiedene Klassen behandelt. In wirklichkeit wurde Matrix aber nur einmal mit Hilfe eines Templates implementiert und kann für alle Typen von Objekten verwendet werden (die Programmdatei wird dementsprechend größer)
-
Die Klasse string z.B. ist ein typedef auf:
basic_string<char, char_traits<char>, allocator<char>>
-
[ Dieser Beitrag wurde am 03.06.2003 um 11:27 Uhr von TS++ editiert. ]
-
Auch interessant ist sowas:
template<int i, int j> struct max { enum { ret = i > j ? i : j }; }; template<int i, int j, int k> struct max3 { enum { ret = max<max<i, j>::ret, k>::ret }; }; template<class T, int i> class fixed_vector { T p[i]; public: T &operator[](int x) { return p[x]; } T operator[] (int x) const { return p[x]; } } struct X { enum _type { Int, Double, Fixed_vector } type; union { int *a; double *b; fixed_vector<int, 4> *c; } x; char z[max3<sizeof(int), sizeof(double), sizeof(fixed_vector<int, 4> )>::ret]; X(_type x) : type(x) { switch (x) { case Int: x.a = z; new(a) int; break; case Double: x.b = z; new(b) double; break; case Fixed_vector: x.c = z; new(c) fixed_vector<int, 4>; break; } } ~X() { if (type == Fixed_vector) x.c->~fixed_vector(); } }
EDIT: const an der falschen stelle
EDIT 2: verdeutlichung des anwendungsgebietes
(kein Anspruch auf Richtigkeit)[ Dieser Beitrag wurde am 03.06.2003 um 12:11 Uhr von Mr. N editiert. ]
-
PS: Wer Placement-new verwendet, muss auch den Destruktor aufrufen.