Bonjour.
Dans son tutoriel sur la métaprogrammation, Laurent Gomila propose l'implémentation de la factorielle suivante :
Je me demandais comment bloquer la compilation "message d'erreur" quand N est supérieur à 11 (car 12! dépasse 2^32)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 template<unsigned int N> struct Factorielle { enum {Value = N * Factorielle<N - 1>::Value}; }; template<> struct Factorielle<0> { enum {Value = 1}; };
Merci
EDIT :
J'en profite pour glisser une autre question. L'implémentation de la puissance entière est la suivante :
Pour travailler avec tous les types de données est-ce que l'implémentation suivante fonctionnerai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 template <int N> inline double Puissance(double x) { return x * Puissance<N - 1>(x); } template <> inline double Puissance<0>(double x) { return 1.0; }
C'est à dire où dans l'utilisation que je fais de Puissance, le "class T" est détecté automatiquement et je n'ai pas à le spécifié ?
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 template <int N, class T> inline T Puissance(T x) { return x * Puissance<N - 1>(x); } template <> inline T Puissance<0>(T x) { return (T)(1); } int main () { double a = 3.15; double b; a = Puissance<10>(b); }
Partager