Partager via


Modèles de fonctions

Les modèles de classe définissent une famille de classes connexes basés sur les arguments de type passés à la classe à l'instanciation.Les modèles de fonctions sont semblables aux modèles de classe mais définissent une famille de fonctions.Avec les modèles de fonction, vous pouvez spécifier un ensemble de fonctions qui sont basés sur le même code mais agissez sur différents types ou les classes.le modèle de fonction suivant permute deux éléments :

// function_templates1.cpp
template< class T > void MySwap( T& a, T& b ) {
   T c(a); 
   a = b; 
   b = c;
}
int main() {
}

Ce code définit une famille de fonctions qui permutent les valeurs des arguments.De ce modèle, vous pouvez générer des fonctions qui permuteront des types d' int et de long et également des types définis par l'utilisateur.MySwap permutera même des classes si le constructeur de copie et l'opérateur d'assignation de la classe sont correctement définis.

En outre, le modèle de fonction vous empêchera des objets d'échange de types différents, car le compilateur connaît les types des paramètres d' a et d' b au moment de la compilation.

Bien que cette fonction peut être remplie par une fonction non basée sur un modèle, à l'aide de les pointeurs void, la version de modèle soit type sécurisé.considérez les appels suivants :

int j = 10;
int k = 18;
CString Hello = "Hello, Windows!";
MySwap( j, k );          //OK
MySwap( j, Hello );      //error

Le deuxième appel d' MySwap déclenche une erreur de compilation, parce que le compilateur ne peut pas générer une fonction d' MySwap avec des paramètres de types différents.Si des pointeurs void étaient utilisés, les deux appels de fonction compileraient correctement, mais la fonction ne fonctionnerait pas correctement au moment de l'exécution.

Il permet la spécification explicite des arguments template pour un modèle de fonction.Par exemple :

// function_templates2.cpp
template<class T> void f(T) {}
int main(int j) {
   f<char>(j);   // Generate the specialization f(char).
   // If not explicitly specified, f(int) would be deduced.
}

Lorsque l'argument template est spécifié explicitement, les conversions implicites de normale sont faites pour convertir l'argument de fonction en type des paramètres correspondants de modèle de fonction.Dans l'exemple ci-dessus, le compilateur convertit (char j) tapez int.

Voir aussi

Référence

Instanciation du modèle de fonction

Instanciation explicite

Spécialisation explicite des modèles de fonctions

Autres ressources

Modèles