Es kann nicht wie gewünscht durchgeführt werden. Aus irgendeinem Grunde (ich bin über die Gründe nicht sicher) explizite (d voll) Spezialisierung eines Mitglied Vorlage nur dann zulässig ist, wenn die umgebende Klasse auch explizit (das heißt voll) spezialisiert ist. Diese Anforderung ist im Sprachstandard explizit festgelegt (siehe 14.7.3/18 in C++ 98, C++ 03 und 14.7.3/16 in C++ 11).
Zur gleichen Zeit, Teil Spezialisierungen von Klassenmitglied Vorlagen erlaubt, die in vielen Fällen als eine Umgehung verwendet werden kann (wenn auch eine hässlichen eins). Aber offensichtlich ist es nur für Mitglieder Klasse Vorlagen anwendbar. Wenn es sich um Member Funktion Vorlagen handelt, muss eine alternative Lösung verwendet werden.
Zum Beispiel kann eine mögliche Abhilfe ist, den Anruf zu einem statischen Elemente einer Template-Klasse zu delegieren und die Klasse spezialisiert statt
template <class T>
class MyClass
{
template <int N, typename DUMMY = void> struct Func {
static void func() { printf("unspecialized\n"); }
};
template <typename DUMMY> struct Func<0, DUMMY> {
static void func() { printf("specialized\n"); }
};
template <int N> void func() { Func<N>::func(); }
};
(was oft als eine bessere Idee, als Spezialisierung der Funktionsschablonen
http://www.gotw.ca/publications/mill17.htm empfohlen)
Sie sollten die Fehlermeldung hinzufügen, die Sie erhalten, da "nicht funktioniert" uns wirklich nicht viel sagt. – sth