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 :
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;
        }
    };
Et "bien sur" j'ai Angle, qui est défini ainsi :
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.

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