Mal schauen, ob ich nicht auch schon zu müde bin, aber ich probier es, zu erklären
klassa2 schrieb:
Äh, es geht also NUR, wenn T einen impliziten Ctor mit einem Parameter hat, richtig?
Nein, bei T ist es egal. Aber wenn du std::complex übergibst, dann muss der std::complex<Type>::value_type einen impliziten Konstruktor haben, welcher eine 0 aktzeptieren kann. Schau mein Beispiel an, welches ich dem Nexus gezeigt habe. Damit sollte es eigentlich klar werden.
klassa2 schrieb:
Ja, das weiß ich. Aber meine 2 Fragen aus meinem letzten Posting beantwortet das irgendwie nicht^^
Ok, Frage 1 ist einfach:
Lass es bei der Referenz auf ein konstantes Objekt. Falls da mal ein grösseres Objekt übergeben werden sollte, ist die Referenz auf das konstante Objekt definitiv besser.
Zur Frage 2:
Bevor die Funktion aufgerufen wird, wird sie vom Kompiler instanziert. Dabei probiert er den richtigen Typen für T zu finden. Du übergibst:
1. Argument: int
2. Argument: std::vector<float>
Was soll nun T sein? int oder float ? Ist nicht klar, daher der Fehler.
Deshalb muss man 2.0f angeben, damit beide Typen float sind und es keinen Fehler gibt, bzw. eindeutig ist.
Grüssli