Je veux créer un pointeur vers une fonction basé sur un modèle:puis-je créer un pointeur vers une fonction de modèle dans une étendue?
template <class T>
void foo(T x){}
int main()
{
template <class T>
void (*ptr)(T);
return 0;
}
je suis arrivé erreur ci-dessus: error C2951: template declarations are only permitted at global or namespace scope
donc je peux le réparer en déclarant le pointeur de fonction basé sur un modèle dans une portée globale et il fonctionne très bien :
template <class T>
void foo(T x){ cout << "foo()" << endl;}
template <class T>
void (*ptr)(T);
int main()
{
ptr = foo;
(*ptr)(7);
return 0;
}
- est-il un moyen de déclarer un pointeur vers l'intérieur d'une fonction templated portée comme dans le premier code?
Votre second extrait de code ne l'a pas * corrigé *. – WhiZTiM
Les fonctions modèles n'existent même pas tant qu'elles ne sont pas instanciées avec un type, de sorte qu'un pointeur vers un modèle de fonction est impossible. Vous pouvez obtenir des pointeurs vers des instances spécifiques, cependant, comme 0oo' – AndyG
' modèle void (* ptr) (T); 'serait un modèle variable depuis C++ 14. mais l'utilisation serait quelque chose comme 'ptr = foo;'. –
Jarod42