Templates
-
Hallöle,
Ich lerne grade C++ und bin bei dem Kapitel "Templates" angelangt.
Klingt daweil nicht schwer.
Jedenfalls will ich die Übung machen und tu mir dabei schwer:Ich soll eine Template-Funktion schreiben, die den Typ der übergebenen Variable herausfindet.
Dachte, dass wäre nicht allzu schwer. Jetzt stellt sich mir die Frage. Wie bekomm ich den Datentyp der Variable ?
Sobald ich was in Google eingebe, spuckt der mir laute Tutorials aus x/
Mein Code sah bisjetzt so aus:
template <typename T> void gtt(T& a) { if(a == int) std::cout << "Integer-Variable\n"; else if(a == char) std::cout << "Char-Variable\n"; else if (a == float) std::cout << "Float-Variable\n"; else if(a == double) std::cout << "Double-Variable\n"; }Nun ja, hat nicht lange gedauert, bis ich feststellte das es kompletter Schwachsinn ist x)
Bin dankbar für jede Antwort.
Die Frage war: Wie bekomm ich den Datentyp der übergebenen Variable ?Gruß Helmie
-
typeid(a) == typeid(int)
-
T statt a
-
Dankeschön

Werde ich gleich mal testen!
€dit: Hat funktioniert
Danke nochmal!
-
Du kannst auch für jeden Typen, den du erkennen willst eine Spezialisierung schreiben.
-
drakon schrieb:
Du kannst auch für jeden Typen, den du erkennen willst eine Spezialisierung schreiben.
Hmmm, könntest du das etwas erklären?

Was ist denn mit Spezialisierung gemeint?Lg
-
Nun, sowas hier:
template <typename _type_> void DoSomething(_type_ Obj){/*...*/} // Allgemein template <int> void DoSomething(int Obj) // Für den Typ intVerzeih mir aber, wenn ich einige Fehler gemacht habe, aber Spezialisierungen habe ich schon beinahe wieder vergessen ... tja, dann weiss ich wenigstens, was ich wiederholen muss.
-
Der aus dem Westen ... schrieb:
Nun, sowas hier:
template <typename _type_> void DoSomething(_type_ Obj){/*...*/} // Allgemein template <int> void DoSomething(int Obj) // Für den Typ intVerzeih mir aber, wenn ich einige Fehler gemacht habe, aber Spezialisierungen habe ich schon beinahe wieder vergessen ... tja, dann weiss ich wenigstens, was ich wiederholen muss.
Kein Problem, jetzt versteh ich´s!
Aber mache ich daraus nicht aus einer Mücke einen Elefanten?Es ist eine simple Aufgabe, Funktion bekommt eine Variable übergeben, Funktion stellt fest was für ein Typ und schreibt: "Typ-Variable"
Mehr sollte die Funktion nicht machen.
Aber danke für den Tipp, jedenfalls hab ich was neues dazu gelernt!
-
Mücke 'nen Elefanten?
Tut mir leid, aber mir ist das relativ egal. Ich war nur besorgt, dass ich mich irren könnte, da ich mit Templatespezialisierungen kaum zu tun habe. Wie dem auch immer sei.
-
Ich würde die Spezialisierung sogar allem anderem vorziehen, da es in etwa den gleichen Aufwand hat, allerdings bereits zur Kompilierzeit die Auswahl gemacht wird. Dein Programm macht dann zur Laufzeit lediglich noch den Funktionsaufruf und die Ausgabe. Die Auswahllogik hat bereits stattgefunden.
-
Vor allem, da du dich gerade mit Templates beschäftigst, solltest du die Spezialisierung benutzen.
typeidgehört eher in die Ecke RTTI. Quasi das Gegenstück zu Templates (statische vs. dynamische Polymorphie).
-
KÖnnte man hier nicht auch mit sizeof() arbeiten? dann könnte man gegebenenfalls jedoch nicht zwischen bool oder char etc. unterscheiden, da beide 1 Byte benötigen????
lg, freakC++
-
freakC++ schrieb:
KÖnnte man hier nicht auch mit sizeof() arbeiten?
Wieso sollte man das denn wollen? Mit Spezialisierung hast du das genau gelöst aber sizeof sagt in erster Linie einmal nichts über den Typen aus..
-
Zum Thema Funktion Templates Sepzialisierung:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-246296-and-highlight-is-.htmlSimon
-
theta schrieb:
Zum Thema Funktion Templates Sepzialisierung:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-246296-and-highlight-is-.htmlSimon
Dank dir, werde es doch mit einer Template Spezialisierung machen.
Da der Autor es auch so gemacht hat x)
-

Ehm, welcher Autor?
-
Ulrich Beymann - Der C++ Programmierer
-
Was hat es eigentlich mit dem Threadtitel auf sich?