Maison >développement back-end >C++ >Comment instancier explicitement des fonctions de modèle en C ?

Comment instancier explicitement des fonctions de modèle en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-09 00:40:10224parcourir

How to Explicitly Instantiate Template Functions in C  ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn