den folgenden Code Gegeben:C++ Überladung hat Vorrang vor Spezialisierung?
#include <iostream>
using namespace std;
template<typename T> void Print(T t) {
cout << t << endl;
}
template<> void Print<int>(int t) {
cout << "int = " << t << endl;
}
void Print(int i) {
cout << "int2 = " << i << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
Print(1.3);
Print("tese");
Print(2);
char c;
cin >> c;
return 0;
}
der Anruf Print (2) nicht mehrdeutig Warum ist, sondern Aufruf ungültig Print (int i)?
ps: Getestet mit bcc64.exe und cl.exe.
Da die Überladungsauflösung zuerst die beste Übereinstimmung aus den regulären Funktionen und den primären Vorlagen ermittelt. Erst wenn das erledigt ist, sucht es nach Spezialisierungen. Es gibt einen GOTW-Artikel von Herb Sutter über diese Eigenart. [Hier.] (Http://www.gotw.ca/publications/mill17.htm) – jrok
@jrok und das ist falsch – PierreBdR
@PierreBdR Oh. Es gilt in diesem Fall nicht, ich gebe zu (schlechte Lesart meinerseits) Aber es ist ansonsten korrekt :) – jrok