3
template <typename T> 
bool validate(const T& minimum, const T& maximum, const T& testValue) { 
    return testValue >= minimum && testValue <= maximum; 
} 

template <> 
bool validate<const char&>(
    const char& minimum, 
    const char& maximum, 
    const char& testValue) 
{ 
    char a = toupper(testValue); 
    char b = toupper(minimum); 
    char c = toupper(maximum); 
    return a >= b && a <= c; 
} 

Dies ist die Funktion Vorlage, irgendwie in main wenn validate Funktion aufgerufen wird, verwendet er nie die zweite Funktion (die für const char&), auch wenn die Parameter char sind. Kann jemand sehen, wo mein Problem ist?explizite Spezialisierung für Funktionsvorlage C++

+0

Zeigen Sie uns, wie Sie es nennen. – user975989

Antwort

6

Der Typ Sie spezialisiert - const char& passt nicht, was T folgert, wie wenn Sie eine char passieren - es char folgert!

So (Template-Typ-Parameter können nur in Anwesenheit von Universal-Referenzen auf Referenzen ableiten)

template <> 
bool validate<char> ... 

Anyways, warum Sie nicht stattdessen eine Überlastung?