Template Funktion ausführen ohne Typ anzugeben
-
hi,
Ich benutze Codeblocks mit dem beigelieferten g++.
Mir ist etwas extrem seltsames passiert.
Ich habe eine ganz normale template funktion gebaut.Bsp:
template<typename Type> void func(Type a,Type b) { ... }Diese habe ich dann im Programm benutzt
char a,b; func(a,b);Das funktioniert tadellos.
Doch wer aufmerksam gelesen hat wird merken, dass ich gar nich
func<char>(a,b)geschrieben habe.
Warum funktioniert es?
-
hoi
Lobart schrieb:
Doch wer aufmerksam gelesen hat wird merken, dass ich gar nich
func<char>(a,b)geschrieben habe.
das wuerdest du schreiben wenn du z.b. folgende funktion haettest:
template<typename T> T func(int a, int b) { ... }hier musst du naemlich '<char>' angeben, damit der kompiler weiß was T sein soll. ansonsten weiß der kompiler das er fuer 'T' das int einsetzen muss.
Meep Meep
-
Das nennt sich Template Argument Deduction.
-
lolz schrieb:
Das nennt sich Template Argument Deduction.
und bedeutet in Kurzfassung, daß der Compiler aus den Parametern erkennt, welche Spezialisierung er benötigt - du hast der Funktion char's übergeben, also erzeugt er dir die char-Version der Funktion (bei int-Parametern würde er die func<int> anlegen, bei gemischten Parametern würde er dir eine Fehlermeldung um die Ohren hauen).