[C++] template de fonction
Résolu
Bonjour,
je me posait une question : serait il possible de faire des template de fonction ? (je pense que la réponse est non, mais si vous pouviez confirmer)
Je m'explique. J'ai une class Matrice, et je redefini pas mal de fonction (cosinus, log etc.) de façon à faire cos(matrice) directement.
Je me suis dit, il serait intéressant de faire ça en template, dans le genre :
template<function f> matrice f(matrice M)
{
matrice A=M;
for(tout les membres de la matrice)
A[i][j]=f(M[i][j]);
return A;
}
Merci de vos réponses
je me posait une question : serait il possible de faire des template de fonction ? (je pense que la réponse est non, mais si vous pouviez confirmer)
Je m'explique. J'ai une class Matrice, et je redefini pas mal de fonction (cosinus, log etc.) de façon à faire cos(matrice) directement.
Je me suis dit, il serait intéressant de faire ça en template, dans le genre :
template<function f> matrice f(matrice M)
{
matrice A=M;
for(tout les membres de la matrice)
A[i][j]=f(M[i][j]);
return A;
}
Merci de vos réponses
A voir également:
- [C++] template de fonction
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
3 réponses
En fait tu peux passer en paramètres template un foncteur.
Ce qui donne :
Je rappelle au passage que toute structure template doit être intégralement dans un .hpp, sinon elle n'est utilisable que dans le fichier source dans lequel elle est implémentée. Bien entendu tu n'es sensé qu'inclure des headers, donc les structures, classes et fonctions templates sont en général implémentées dans un header.
Bonne chance
#include <iostream> template <typename T> struct add_f{ inline T operator()(const T & x,const T & y) const{ return x + y; } }; template <typename T> struct mult_f{ inline T operator()(const T & x,const T & y) const{ return x * y; } }; template <typename T,typename F> T appliquer_foncteur(const T & x,const T & y){ return F()(x,y); } int main(){ { typedef add_f<int> add_int; int x = 5, y = 6; std::cout << appliquer_foncteur<int,add_int>(x,y) << std::endl; } { typedef mult_f<float> mult_float; float x = 6.9, y = 2.8; std::cout << appliquer_foncteur<float,mult_float>(x,y) << std::endl; } return 0; }
Ce qui donne :
11 19.32
Je rappelle au passage que toute structure template doit être intégralement dans un .hpp, sinon elle n'est utilisable que dans le fichier source dans lequel elle est implémentée. Bien entendu tu n'es sensé qu'inclure des headers, donc les structures, classes et fonctions templates sont en général implémentées dans un header.
Bonne chance
Ok, merci de la réponse.
C'est pas évidant, je vais regarder ça de plus près.
La solution que j'applique est un peut différente, mais fonctionne.
class matrice{
//divers memebre de la classe
matrice fct(double f(double));
}
ce qui permet de faire une fonction non défini de la façon suivante :
matrice A;
A.fct(fonction_a_appliquer_a_la_matrice).
C'est pas évidant, je vais regarder ça de plus près.
La solution que j'applique est un peut différente, mais fonctionne.
class matrice{
//divers memebre de la classe
matrice fct(double f(double));
}
ce qui permet de faire une fonction non défini de la façon suivante :
matrice A;
A.fct(fonction_a_appliquer_a_la_matrice).