typename T
ile şablonlanmış bir sınıf var. Bu örnekNeden benim templated işlevi 'T', 'T', 'T' = 'double' teşvik eder?
myClass<double, 2> myObj_double_2(constructor args);
myObj_double_2 = myObj_double_2 + 5.2;
için ben bu çağrı bir işlevi,
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;
}
içerir.
Ben ancak
myObj_double_2 = myObj_double_2 + 5;
Sonra derleyici bana böyle bir mesaj verir çağırırsanız -
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')
.
Kodu, T
'a dönüşen ek türlerin geçirilmesine izin vermek için bir şekilde yazabilir miyim (örneğin, çift (5) geçerli bir yapıcı çağrısıdır)?
try myObj_double_2 = myObj_double_2 + 5.0; ' – 101010
Evet - bu hiç bir zorlukla çalışmaz, ancak sorduğum sorunu çözmüyor (basit ve açık çözüm olmasına rağmen) – chrisb2244
Hayır int-> çift" promosyon "var. –