Définition d'un type pour une spécialisation de template
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:
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 :
Code:
typedef float Angle;
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