Ich habe eine Klasse mit typename T
Templatet. Es enthält eine Funktion,Warum fördert meine Vorlagenfunktion 'int' nicht zu 'T', wo 'T' = 'doppelt' ist?
template <typename T, size_t a>
myClass<T,a> operator+(myClass<T,a> lhs, const T& rhs) {
return lhs += rhs;
}
myClass<T,a> myClass<T,a>::operator+=(const T& rhs) {
// Do addition, depends on 'a'.
return *this;
}
Als ich das nennen mit zum Beispiel
myClass<double, 2> myObj_double_2(constructor args);
myObj_double_2 = myObj_double_2 + 5.2;
ich kein Problem haben.
Wenn ich aber
nennenmyObj_double_2 = myObj_double_2 + 5;
Dann wird der Compiler gibt mir eine Nachricht wie - No match for 'operator+' (operand types are 'myClass<double, 2ul>' and 'int'). Candidates are ... note: deduced conflicting types for parameter 'const T' ('double' and 'int')
.
Kann ich den Code in irgendeiner Weise schreiben, damit zusätzliche Typen übergeben werden können, die eine Konvertierung in T
haben (da beispielsweise double (5) ein gültiger Konstruktoraufruf ist)?
versuchen 'myObj_double_2 = myObj_double_2 + 5.0;' – 101010
Ja - das wird ohne Probleme funktionieren, aber es löst nicht das Problem, das ich fragte (obwohl es die einfache und offensichtliche Lösung ist) – chrisb2244
No int-> double " Promotion "existiert. –