2010-05-27 3 views
1

Je veux savoir s'il est possible de créer une fonction de modèle et ensuite créer un pointeur de fonction qui pointe vers cette fonction de modèle. Est-ce possible?Est-il possible d'avoir un pointeur de fonction vers une fonction template en C++?

J'utilise VS2008.

Le code suivant obtient cette erreur de compilation:

« ne peut pas convertir « fonction surcharge » à « int (__cdecl *) (int &, int &) » Aucune des fonctions avec ce nom dans la portée correspond au type de cible "

template<typename T> 
T tfunc(const T &x, const T &y){ 
    return (x < y ? x : y); 
} 

int (*tfunc_ptr)(int &, int &) = &tfunc<int>; 
+0

Quel est le but de __cdecl? – sellibitze

+0

Ne modifiez jamais votre question pour y inscrire la bonne réponse. Laissez-le tel quel, et laissez les gens lire la réponse ci-dessous. –

+1

Plus important encore, ne supprimez pas simplement le contenu de la question. Celui qui le lit plus tard a besoin du contexte de la réponse. –

Répondre

11

Vos arguments sont incorrects. tfunc prend est arguments par des références const donc votre pointeur de fonction doit faire la même chose;

int (*tfunc_ptr)(const int &, const int &) = &tfunc<int>; 
+0

qui a fonctionné. Merci. – LoudNPossiblyWrong

2

Hmm ... qu'est-il arrivé à la réponse que vous avez eue? C'était correct. Vous devez fournir le paramètre de modèle:

int (*tfunc_ptr)(int const&,int const&) = &tfunc<int>;

Oh, et notez les références. Votre modèle les a, votre funptr ne le fait pas. Cela doit correspondre.

+0

qui n'a pas fonctionné, j'ai mis à jour mon affichage avec l'erreur de compilation que je reçois. – LoudNPossiblyWrong

+0

@LoudNPossiblyRight: Vos arguments ne correspondent pas: 'int &' par rapport à 'T const &' avec 'T' étant' int'. Notez que le 'const' ** fait ** partie de la signature. –

3
template<typename T> 
T tfunc(const T &x, const T &y){ 
return (x < y ? x : y); 
} 

int (*tfunc_ptr)(const int&, const int&) = tfunc<int>; 

int main() { 
    int b = tfunc_ptr(1, 2); 
} 
Questions connexes