Warum kann Funktionsvorlage nicht teilweise spezialisiert werden?
Ich die Sprache kennen-Spezifikation verbietet teilweise Spezialisierung der Funktion Vorlage.
Ich würde gerne wissen, die Gründe, warum es verboten wird? Sind Sie nicht nützlich?
template<typename T, typename U> void f() {} //allowed!
template<> void f<int, char>() {} //allowed!
template<typename T> void f<char, T>() {} //not allowed!
template<typename T> void f<T, int>() {} //not allowed!
InformationsquelleAutor der Frage Nawaz | 2011-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
AFAIK hat sich das verändert in C++0x.Ich denke, es war nur ein versehen (wenn man bedenkt, dass Sie immer die partielle Spezialisierung Effekt mit Ausführlicher code, indem Sie die Funktion als
static
member einer Klasse).Vielleicht schauen Sie relevante DR (Mängelanzeige), wenn es einen gibt.
BEARBEITEN: wenn Sie dieses, finde ich, die anderen haben auch geglaubt, dass, aber niemand ist in der Lage zu finden, eine solche Unterstützung in dem Norm-Entwurf. Diese SO-thread scheint zu zeigen, dass teilweise Spezialisierung von Funktions-templates wird nicht unterstützt in C++0x.
EDIT 2: nur ein Beispiel, was ich damit meine "Platzierung der Funktion als
static
Mitglied einer Klasse":InformationsquelleAutor der Antwort Cheers and hth. - Alf
Im Allgemeinen ist es nicht empfohlen, sich zu spezialisieren-Funktion-Vorlagen an alle, wegen der Probleme mit überlastung. Hier ist ein guter Artikel aus der C/C++ Users Journal: http://www.gotw.ca/publications/mill17.htm
Und enthält eine ehrliche Antwort auf Ihre Frage:
InformationsquelleAutor der Antwort Georgy Pashkov
Gut, kann man wirklich nicht tun, partielle Funktion/Methode Spezialisierung jedoch, die Sie tun können, zu überladen.
Es ist der Weg, aber ich weiß nicht, ob es Sie zufrieden zu stellen.
InformationsquelleAutor der Antwort Michal W
Da kann man teilweise spezialisieren Klassen, die Sie verwenden können, Funktor:
InformationsquelleAutor der Antwort Kay F. Jahnke