[C++] template de fonction

Résolu
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -  
mamiemando Messages postés 33774 Date d'inscription   Statut Modérateur Dernière intervention   -
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
A voir également:

3 réponses

mamiemando Messages postés 33774 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
En fait tu peux passer en paramètres template un foncteur.
#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
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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).
0
mamiemando Messages postés 33774 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Ben en C il était déjà possible de passer un pointeur de fonction si tu vas dans ce sens. Cf la fonction qsort par exemple.

Bonne chance
0