C ++ Template-Spezialisierung der Funktion: „illegale Verwendung von expliziten Template-Argumenten“

StackOverflow https://stackoverflow.com/questions/1416345

Frage

Die folgende Vorlage Spezialisierung Code:

template<typename T1, typename T2>
void spec1()
{

}

Testfall 1:

template< typename T1> //compile error
void spec1<int>()
{

}

Testfall 2:

template< typename T2> //compile error
void spec1<int>()
{

}

generiert die folgenden Kompilierung-Fehler:

  

Fehler C2768: 'spec1': illegale Verwendung von expliziten Template-Argumenten

Hat jemand wissen, warum?

War es hilfreich?

Lösung

Funktionsvorlagen können nicht teilweise spezialisiert werden, nur dann vollständig, das heißt wie folgt aus:

template<>
void spec1<char, int>()
{

}

Für warum Funktionsschablonen nicht teilweise spezialisiert sein können, Sie href="http://www.gotw.ca/publications/mill17.htm" rel="noreferrer"> lesen Sie

Wenn Sie teilweise (für die Klassen nur möglich) spezialisiert ist, würde man es so tun müssen:

template <typename T1>
class class1<T1, int>
{

};

so haben Sie wieder T1 aufzulisten.

Die Art und Weise Ihre Spezialisierungen geschrieben werden, würden sie für spec1<int, int> mehrdeutig sein.

scroll top