Bonjour à tous,
Je me demandais, est t-il possible de définir un type, une sorte de type poupée, pour indiquer une définition particulière d'un template ?
En effet, j'ai le code suivant :
Et "bien sur" j'ai Angle, qui est défini ainsi :
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 template <typename T> class EaseInEaseOutInterpolation { protected: static T get(const T& begin, const T& end, float interp) { // http://math.stackexchange.com/questions/121720/ease-in-out-function float interp2 = interp*interp; return (interp2 / (interp2 + (1 - interp)*(1 - interp))) * (end-begin)+begin; } }; template <> class EaseInEaseOutInterpolation<Angle> { protected: static Angle get(const Angle& begin, const Angle& end, float interp) { Angle diff = end-begin; Angle fixedBegin = begin; Angle fixedEnd = end; if ( diff > 180 ) // Here, normal interpolation will take the longest path { fixedBegin += 360; } else if ( diff < -180 ) { fixedEnd += 360; } Angle result = EaseInEaseOutInterpolation<float>::get(begin,end,interp); // Wrap angle while ( result > 360 ) { result -= 360.f; } while ( result < -360 ) { result += 360.f; } return result; } };
Lorsque j'exécute le code, j'ai une belle erreur de segmentation. Simple à comprendre : le template spécialisé s'appelle en boucle, car pour lui, que ce soit un Angle, ou un float, c'est exactement la même chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part typedef float Angle;
Comment pourrais-je donc vraiment créer un type Angle, qui soit un float, mais qui tombe dans une spécialisation autre, pour le template ?
Merci
Partager