Template : aider le compilateur à inférer un type
Comme on peut s'en douter, le code ci-dessous ne compile pas (GCC 6.2.1 mais peu importe je pense) : le compilateur ne parvient pas à inférer le premier paramètre T. En précisant float ligne 17, ça passe crème.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| // normalizes an interpolation parameter prior to forwarding it
template <typename T, T (*Func)(const T&)>
inline
T normalizeParams(const T& t, const T& start, const T& end) {
const T range(end - start);
return start + Func((t - start) / range) * range;
}
// expects a normalized parameter
template <typename T>
inline
T easeIn(const T& t) {
return t * t * t;
}
int main() {
float a(normalizeParams</*float, */easeIn>(2.24f, .846f, 3.451f));
return int(a);
} |
Oui mais bon, avoir à préciser T n'est pas satisfaisant. Or Func en dépend. Y aurait-il un moyen de donner un coup de pouce au compilo ?