Was haltet ihr hier von? #define TEMP template<class T>
-
Einen globalen Bezeichner einzuführen, der Scopes nicht respektiert und TEMP heißt, scheint mir ein bisschen gefährlich. Könnte zu Kollisionen kommen.
-
Genau,
#define, um den Code übersichtlicher zu machen. Made my day
Viel besser.
und am Ende verfügt C++ für jedes Schlüsselwort mit mehreren Buchstaben eine Einbuchstabige Abkürzungen und kommt damit ungefähr mit der Anzahl Schlüsselwörter aus, die ein Brainfuck Compiler versteht. (Achtung: Harte Ironie!)
Abgesehen davon ist, wenn du eine größere Templateklasse schreibst, das
template<typename T>dein kleinstes Problem und man braucht so gut wie immer nicht nur einen template-Parameter und der sollte auch nicht immerTheißen.
-
Ich schreibe keine Templateklassen, ich schreibe Klassentemplates.
-
Ach ja, bin bei diesen Begriffen noch nicht ganz so sicher. Gäbs eine Seite, wo man sich sowas mal aneignen könnt'?
-
Der Tobi schrieb:
Gäbs eine Seite, wo man sich sowas mal aneignen könnt'?
Ja, hier: http://www.c-plusplus.net/forum/f15 Da wirst immer ein paar Leute finden die dich korrigieren

-
Das hats jetzt gebracht und ich hab tatsächlich auf den Link geklickt.Nur mal so ein wenig Halb-OT:
Klassentemplate ist die Bezeichnung für die Vorlage, also so etwas:template <typename T> class A{};Also wenn man es direkt aus dem Englischen übersetzt (Template = Vorlage): Klassenvorlage. Liege ich damit richtig?
Was ist dann eine Templateklasse? Eine Instanz einer dieser Vorlagen, oder eine spezielle Klasse, die aus der Vorlage bzw. dem Klassentemplate vom Compiler für einen bestimmten Typ T erstellt wird?
-
Gar nichts. Dieser Begriff ist Unfug.
-
Der Tobi schrieb:
Was ist dann eine Templateklasse? Eine Instanz einer dieser Vorlagen, oder eine spezielle Klasse, die aus der Vorlage bzw. dem Klassentemplate vom Compiler für einen bestimmten Typ T erstellt wird?
Was das selbe ist - genau das würde man als Template-Klasse bezeichnen, ja.
-
Hier das ultimative Shortcutmacro:
#define TMPL /* magic */ TMPL(T) // -> template<typename T> T default_value() { return T{}; } TMPL(T S U) // -> template<typename T, typename S, typename U> T sum(S const& s, U const& u) { return s+u; } TMPL(int_I) // -> template<int I> int int_id() { return I; } int main() { std::cout << int_id<3>() << '\n'; std::cout << default_value<double>() << '\n'; std::cout << sum<long double>(1.0, 2.1f) << '\n'; }Wer die Magie (aka WTF-Erlebnis) bestaunen will: http://ideone.com/kTKkMB
-
Ich fasse das mal als Scherz auf.
-
Schön, ich habe schon sehnsüchtig auf das Freitag-Nachmittag-Ticket gewartet

-
king of templer schrieb:
Hier das ultimative Shortcutmacro:
#define TMPL /* magic */ TMPL(T) // -> template<typename T> T default_value() { return T{}; } TMPL(T S U) // -> template<typename T, typename S, typename U> T sum(S const& s, U const& u) { return s+u; } TMPL(int_I) // -> template<int I> int int_id() { return I; } int main() { std::cout << int_id<3>() << '\n'; std::cout << default_value<double>() << '\n'; std::cout << sum<long double>(1.0, 2.1f) << '\n'; }Wer die Magie (aka WTF-Erlebnis) bestaunen will: http://ideone.com/kTKkMB
PI?
Dir ist schon klar, dass das ungefähr Zehn bis Zwanzig mal unlesbarer ist als wenn man ganz normal deklarieren würde?pumuckl schrieb:
Der Tobi schrieb:
Was ist dann eine Templateklasse? Eine Instanz einer dieser Vorlagen, oder eine spezielle Klasse, die aus der Vorlage bzw. dem Klassentemplate vom Compiler für einen bestimmten Typ T erstellt wird?
Was das selbe ist - genau das würde man als Template-Klasse bezeichnen, ja.
Naja ne. Das ist dann einfach nur eine Klasse, oder.
Der Begriff ist mMn Sinnfrei.
-
quiek schrieb:
Immer template<class T> im Code zu schreiben macht den Code irgendwie unübersichtlich was haltet ihr davon ein define zu verwenden?
Nichts.
Die paar Buchstaben kann und sollte man selbst tippen. Bzw. die Auto-Completion der IDE tippen lassen.
Templates sind ein wichtiger Bestandteil der Sprache, und man sollte die Syntax verstehen. Eine weitere komische Makro-Syntax zusätzlich zu können hat da keinen Mehrwert.
Neu dazukommende Entwickler können den Code nicht lesen und müssen sich erstmal das komische Makro ansehen.
Es erschwert die Wartbarkeit - wenn man etwas ändern will muss man u.U. das Makro wieder entfernen und erst wieder alles mit Hand hinschreiben. Oder man darf viel Zeit damit verbringen ein neues Makro zu schreiben das den neuen Fall auch noch abdeckt.Alles in allem: du machst damit alles schlimmer und nichts besser. Dass es dir vorteilhaft erscheint liegt vermutlich einfach daran dass du die Syntax noch nicht so verinnerlicht hast dass du einfach drüberlesen kannst ohne dabei das Hirn einschalten zu müssen.
-
Sone schrieb:
pumuckl schrieb:
Der Tobi schrieb:
Was ist dann eine Templateklasse? Eine Instanz einer dieser Vorlagen, oder eine spezielle Klasse, die aus der Vorlage bzw. dem Klassentemplate vom Compiler für einen bestimmten Typ T erstellt wird?
Was das selbe ist - genau das würde man als Template-Klasse bezeichnen, ja.
Naja ne. Das ist dann einfach nur eine Klasse, oder.
Der Begriff ist mMn Sinnfrei.
mMn ist immerhin schon etwas weg von Unfug.
Immerhin handelt es sich ja bei "template class" fast um einen Begriff des Standards.
Fast, weil nur "non-template class" an mehreren Stellen (ohne formale Definition) verwendet wird.
Wer mag, schreibt explizite Klassentemplatespezialisierung. Verständlicher wird es dadurch nicht.Jedenfalls ist eine Templateklasse etwas anderes als ein Klassentemplate. Ich würde es also begrüßen, wenn Kellerautomat entsprechend reflexartige - und dann tatsächlich sinnfreie - "Korrekturen" unterlässt.
-
Wer mag, schreibt explizite Klassentemplatespezialisierung.
Meinst du generierte Klassentemplatespezialisierung? Die explizite hat doch hiermit nichts zu tun.
-
Sone schrieb:
Wer mag, schreibt explizite Klassentemplatespezialisierung.
Meinst du generierte Klassentemplatespezialisierung? Die explizite hat doch hiermit nichts zu tun.
Ich meine es genau so, wie ich es geschrieben habe.
-
also eine templateklasse ist für mich eine klasse von templates.
sprich eine gewisse art von templates. was das ist steht auf einem anderen blatt (was wahrscheinlich noch gar nicht sauber geschrieben wurde)
-
camper schrieb:
Jedenfalls ist eine Templateklasse etwas anderes als ein Klassentemplate. Ich würde es also begrüßen, wenn Kellerautomat entsprechend reflexartige - und dann tatsächlich sinnfreie - "Korrekturen" unterlässt.
Nimmst du, wenn du einen Hasen zeichnen willst, eine Hasen-Schablone oder einen Schablonenhasen?
Mich wuerde interessieren, was dann deiner Meinung nach eine "Templateklasse" ist.
-
Skym0sh0 schrieb:
also eine templateklasse ist für mich eine klasse von templates.
sprich eine gewisse art von templates. was das ist steht auf einem anderen blatt (was wahrscheinlich noch gar nicht sauber geschrieben wurde)
Hmm, du hast Recht! Das ergibt Sinn.

-
Kellerautomat schrieb:
camper schrieb:
Jedenfalls ist eine Templateklasse etwas anderes als ein Klassentemplate. Ich würde es also begrüßen, wenn Kellerautomat entsprechend reflexartige - und dann tatsächlich sinnfreie - "Korrekturen" unterlässt.
Nimmst du, wenn du einen Hasen zeichnen willst, eine Hasen-Schablone oder einen Schablonenhasen?
Mich wuerde interessieren, was dann deiner Meinung nach eine "Templateklasse" ist.Die (Hasen-)Schablone wird benutzt, um einen (Schablonen-)Hasen zu zeichnen. Ganz einfach.
Sone schrieb:
Skym0sh0 schrieb:
also eine templateklasse ist für mich eine klasse von templates.
sprich eine gewisse art von templates. was das ist steht auf einem anderen blatt (was wahrscheinlich noch gar nicht sauber geschrieben wurde)
Hmm, du hast Recht! Das ergibt Sinn.

Eine Templateklasse ist eine Klasse ganz in dem Sinne, wie C++ den Begriff Klasse versteht.
Außerdem hat eine solche Klasse eine Template-id, ist also eine Spezialisierung eines (Klassen-)Templates. Und weil diese Spezialisierung alle Templateparameter bestimmt, handelt es sich um eine explizite (also vollständige) Spezialisierung.