Bonjour,
Je lis actuellement sur la métaprogrammation (le C++ template metaprogramming de Abrahams et Gurtovoy, notamment), et j'ai une question sur son application au calcul numérique...
Comme tout le monde, je pense, je suis très admiratif devant l'ingéniosité du procédé, mais je n'arrive pas à comprendre l'intérêt pratique de la chose.
Je veux dire, je suis capable d'écrire quelque chose comme
voire,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 template<unsigned long N,unsigned long P> struct Puissance { static const unsigned long value=Puissance<N,P-1>::value*N; }; template<unsigned long N> struct Puissance<N,0> { static const unsigned long value=1; };
et peut être même des trucs un rien plus malin (pour limiter au maximum le nombre d'instanciations), et trouver admirable de pouvoir écrire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 template<unsigned long N,unsigned long P> struct Puissance { static const unsigned long value=Puissance<N,P/2>::value*Puissance<N,P/2>::value*(P%2==1?N:1); }; template<unsigned long N> struct Puissance<N,0> { static const unsigned long value=1; };
Puissance<7,3>;
au lieu de
343; // 7^3
voire
7*7*7;
Mais je ne suis pas certain d'en voir l'intérêt pratique...
Quelqu'un a-t-il un exemple de metaprogramme numérique non trivial?
Francois
Partager