Composition de function avec un "Non-Type Template Parameters"
Bonjour à tous,
J'ai essayé de faire un template qui donne la fonction composée de deux
fonction (sans utilisé de "functor"). Je suis arrivé à ça :
#include <iostream>
template<typename T1,typename T2,typename T3, T1 f1(T2), T2 f2(T3)>
T1 compose_fct(T3 arg)
{
return f1(f2(arg));
};
int twice(int a)
{
return 2*a;
}
int square(int a)
{
return a*a;
}
int main()
{
int (*sqr_tw)(int) = compose_fct<int,int,int,square,twice>;
std::cout << sqr_tw(4) << " :: " << square(twice(4)) << std::endl;
std::cout << sqr_tw(5) << " :: " << square(twice(5)) << std::endl;
std::cout << sqr_tw(6) << " :: " << square(twice(6)) << std::endl;
return 0;
}
(testé avec gcc 3.4.4 et VS2005)
Je trouve dommage d'être obligé de mettre ces 3 "int" dans
compose_fct<int,int,int,square,twice> alors qu'on a toutes les informations
nécéssaire avec le type des functions.
Personne n'a une idée pour améliorer ça ?
Seb
|