Implizite und explizite Template-Funktionen

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Funktions-Templates (Übersicht) - Index

Bei der Auflösung von Aufrufen überladener Funktionen, (den Schritten für die Suche nach einer genauen Übereinstimmung folgend), ignoriert der Compiler Template-Funktionen, die implizit von ihm selbst erzeugt wurden.



 template<class T> T max(T a, T b){
         return  (a > b) ? a : b;
 }
 void    f(int i, char c)
 {
     max(i, i);     // Aufruf von max(int ,int )
     max(c, c);     // Aufruf von max(char,char)
     max(i, c);     // keine Übereinstimmung für max(int,char)
     max(c, i);     // keine Übereinstimmung für max(char,int)
 }



Dieser Programmcode gibt folgende Fehlermeldungen aus:



 Could not find a match for 'max(int,char)' in function f(int,char) Could not find a match for 'max(char,int)' in function f(int,char) Could not find a match for 'max(char,int)' in function f(int,char)



Wenn der Anwender eine Funktion jedoch explizit deklariert, wird die Funktion vollständig in die Suche nach der besten Übereinstimmung einbezogen. Siehe das Beispiel zur expliziten Funktion.

Bei der Suche nach einer exakten Übereinstimmung der Funktionsparameter der Templates, werden einfache Umwandlungen als exakte Übereinstimmungen betrachtet. Siehe das Beispiel für einfache Umwandlungen.

Template-Funktionen mit abgeleiteten Klassenzeigern oder Referenzargumenten stimmen mit ihren öffentlichen Basisklassen überein. Siehe das Beispiel für die Referenzierung der Basisklasse.