Template: Wieso werden nicht float und int akzeptiert?
-
Weil die Typen gleich sein müssen.
-
Wo muss ich den Typnamen in spitzen Klammer angeben
?
@Bashar das ist mir schon klar
ist es denn so das in Templates Typenumwandlungen ( casting ) nicht möglich ist?
-
Stimmt ich dachte, dass man nach dem fkt's namen noch den Typ in spitzen klammern schreiben muss.
divide<double>(12.09, 4.87);
Hatte aber unrecht. Es geht auch ohne.
-
Wenn der Compiler die Templateargumente nicht automatisch herleiten kann, musst du sie explizit angeben:
dividiere<int>(42, 7.0); // oder dividiere<float>(42, 7.0);
was auch immer du als Templateargument angeben willst.
-
Schablone schrieb:
@Bashar das ist mir schon klar
ist es denn so das in Templates Typenumwandlungen ( casting ) nicht möglich ist?
Probier mal diesen Aufruf.
divide<double>(4, 3.565);
Bei mir gehts.
-
besten dank an euch
-
Vielleicht hat der ein Problem weil das erste ein Intergerliteral ist. Probier auch mal dividiere(7., 3.34) aus.
-
Hum, aber wenn die beiden Typen wirklich unterschiedlich sein können, deklariert man dann nicht zwei template-Namen?
-
Mis2com schrieb:
Hum, aber wenn die beiden Typen wirklich unterschiedlich sein können, deklariert man dann nicht zwei template-Namen?
dafür sind doch templates da....
-
Er meint zwei Template-Argumente.
-
Wieso nicht einfach:
template<typename T1,typename T2> inline void dividiere (const T1&wert1,const T2&wert2) { cout<<"Ergebnis ist : "<<wert1/wert2<<endl; }
Klappt selbst wenn T1 und/oder T2 nur Klassen sind die den / operator überladen haben, und zwar ohne Copy Constructor. Im Falle von build-in types ist es wahrscheinlich, dass der Kompiler die Referenze wegoptimiren wird, und da er ja wegen des inline keine Funktion nicht anlegen muss kann er von Fall zu Fall optimiren.
-
@Bashar:
Richtig, mir war der Begriff entfallen...