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.
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
Partager