Pointeur de function comme paramètre d'un template

Résolu
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
-
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
-
Bonjour, j'utilise une librairie C++ (www.antigrain.com) basée essentiellement sur les templates.

Je n'arrive pas a appeler la fonction template suivante (membre d'une classe):

template<class GammaF> void gamma(const GammaF& gamma_function) {

int i;

for(i = 0; i < aa_scale; i++)

m_gamma[i] = uround(gamma_function(double(i) / aa_mask) * aa_mask);

}


Je définit la fonction paramètre de gamma:


double gamma_threshold05(double g) { return (g < 0.5) ? 0 : 1; }


Je réalise l'appel ainsi (je précise que gamme est membre de la classe de l'objet scanlineRasterizerAA)

scanlineRasterizerAA.gamma(gamma_threshold05);


Normalement ce code ne devrait pas avoir de problème, je me souvient
l'avoir utiliser avec DevC++, mais la je suis sous Visual C++ express
et il me renvoi l'erreur suivante:

1>.\TabDrawer.cpp(39) : error C2784: 'void
agg::rasterizer_scanline_aa<>::gamma(const GammaF &)' :
impossible de déduire l'argument modèle pour 'type de fonction
surchargée' à partir de 'type de fonction surchargée'

1> C:\CLibs\agg-2.4\include\agg_rasterizer_scanline_aa.h(155) : voir
la déclaration de 'agg::rasterizer_scanline_aa<>::gamma'

1>.\TabDrawer.cpp(39) : error C2784: 'void
agg::rasterizer_scanline_aa<>::gamma(const GammaF &)' :
impossible de déduire l'argument modèle pour 'type de fonction
surchargée' à partir de 'type de fonction surchargée'

1> C:\CLibs\agg-2.4\include\agg_rasterizer_scanline_aa.h(155) : voir
la déclaration de 'agg::rasterizer_scanline_aa<>::gamma'


Je suppose qu'il faut donc spécifier le type de GammaF (dans la fonction gamma) lors de l'appel:
scanlineRasterizerAA.gamma<????????>(gamma_threshold05);


Voilà, tout le problème est donc de savoir quoi mettre à la place des ?????, quelqu'un sait t'il ??

J'ai essayé void (*f)(double) mais c'est pas bon.


Merci pour votre aide.


Bouba

1 réponse

Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
Bon, c'est bon finalement j'ai trouvé:
scanlineRasterizerAA.gamma<double (*)(double)>(gamma_threshold05);