Fonctions template implicites et explicites

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Présentation des templates de fonctions - Index

Pendant une résolution de surcharge (en suivant les étapes d'une recherche de correspondance parfaite), le compilateur ignore les fonctions template générées implicitement par le compilateur.



 template<class T> T max(T a, T b){
         return  (a > b) ? a : b;
 }
 void f(int i, char c)
 {
     max(i, i);     // Appelle max(int ,int )
     max(c, c);     // Appelle max(char,char)
     max(i, c);     // Pas de correspondance pour max(int,char)
     max(c, i);     // Pas de correspondance pour max(char,int)
 }



Ce code génère les messages d'erreur suivants :



 Impossible de trouver la correspondance pour 'max(int,char)' dans la fonction f(int,char)
 Impossible de trouver la correspondance pour 'max(char,int)' dans la fonction f(int,char)



Si l'utilisateur déclare explicitement une fonction, cette fonction participera totalement dans la résolution de surcharge. Voir l'exemple de fonction explicite.

Lors de la recherche de paramètres de fonction template avec correspondance exacte, les conversions triviales sont considérées comme des correspondances exactes. Voir l'exemple des conversions triviales.

Les fonctions template avec pointeur de classe dérivée ou arguments de référence sont autorisés de façon qu'elles correspondent à leurs classes de base publiques. Voir l'exemple de référencement de classe de base.