Comment instancier explicitement une fonction de modèle?
J'ai un modèle de fonction avec un argument.
Je dois instancier la fonction sans en appelant cette fonction signifie explicitement que j'ai à instancier.
J'ai cette fonction:
template <class T> int function_name(T a) {}
J'ai instancié que la fonction comme ceci:
template int function_name<int>(int);
Mais j'ai les erreurs suivantes:
error: expected primary-expression before 'template'
error: expected `;' before 'template'
Vous devez vous connecter pour publier un commentaire.
[EDIT 2]: à Noter qu'il y a une certaine confusion concernant le code dans la question d'origine en raison de code de formatage. Voir AnthonyHatchkins réponse pour plus de détails.
Si vous voulez vraiment instancier (au lieu de se spécialiser ou quelque chose) de la fonction, de faire ceci:
[MODIFIER] Il semble y avoir un peu (beaucoup) de confusion quant à l'instanciation explicite et de spécialisation.
Le code que j'ai posté ci-dessus traite de explicite de l'instanciation de. La syntaxe pour spécialisation est différent.
Voici la syntaxe pour la spécialisation:
Remarque que l'angle entre crochets après le modèle!
template<>
forme. Ce qu'il a écrit est différent de orientation. +1 pour m'enseigner cette nouvelle chose. Je suis à la suppression de mon post. 😀Votre code est correct.
Le message d'erreur lié à un endroit dans le code que vous n'avez pas citer ici.
Mise à jour:
Code Original a été
et c'était correct.
Mais il n'a pas été cité et donc regardé comme ceci:
Il génère l'erreur suivante
qui est clairement différent de ce que l'OP cité.
Dans cette variante, la deuxième ligne est ok (
<int>
peut être omis ici), mais la première ligne est défectueuse. Le compilateur ne peut pas deviner queT
est un paramètre du modèle.template int function_name( T a) { }
ettemplate int function_name(int);