Instanciation explicite des fonctions de modèle
En C, les fonctions de modèle fournissent un moyen de définir des opérations qui peuvent opérer sur différents types. Parfois, il devient nécessaire d’instancier explicitement une fonction modèle sans l’appeler directement. Cela peut être utile dans les situations où le compilateur ne peut pas déduire automatiquement les arguments du modèle.
Considérons l'exemple suivant :
template <class T> int function_name(T a);
Pour instancier explicitement cette fonction pour des entiers, on peut tenter d'écrire :
template int function_name<int>(int);
Cependant, cette approche entraîne les erreurs suivantes :
error: expected primary-expression before 'template' error: expected `;' before 'template'
Pour correctement explicitement instanciez la fonction, utilisez la syntaxe suivante :
template <typename T> void func(T param); // definition template void func<int>(int); // explicit instantiation
Il est important de noter que ce code effectue une instanciation explicite, pas une spécialisation. La syntaxe de spécialisation diffère légèrement :
template <typename T> void func(T param); // definition template <> void func<int>(int); // specialization
L'instanciation explicite garantit que le code de la fonction de modèle instanciée est généré par le compilateur, le rendant disponible pour une utilisation sans qu'il soit nécessaire d'appeler directement la fonction de modèle avec le code approprié. tapez des arguments.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!