Betrachten Sie das folgende Beispiel:Wie kann ich eine Template-Klassenmitgliedsfunktion spezialisieren?
template <class T, class U>
class Test {
public:
void f(){std::cout<<"f() not specized"<<std::endl;}
void g(){std::cout<<"g() not specized"<<std::endl;}
void h(){std::cout<<"h() not specized"<<std::endl;}
//void g<long, double>(){}
};
Hier bin en Fehler auf dem kommentierten Code haben. Ich denke, der einzige Weg, um das erwartete Ergebnis zu erreichen, ist die ganze Klasse zu spacialize. Aber in der Klasse, die unten erwähnt wird, kann ich das Standardverhalten meiner ursprünglichen Klasse (e. F() und h() Funktionen) nicht verwenden.
template <>
class Test<long, double> {
public:
void f(){std::cout<<"f() specized long, double"<<std::endl;}
};
Gibt es also eine Möglichkeit, die Funktion in der ursprünglichen Klasse zu vereinheitlichen?
Dank. Es hat funktioniert. Aber ich gehe umher wie es funktioniert, weil der Körper von f niemals im Namensraum der Klasse deklariert wird ?? –
@EduardRostomyan, Eine Definition ist auch eine Deklaration. Auch wenn das nicht funktioniert, um Mitglieder einer Klasse zu deklarieren, funktioniert es, um Mitglieder einer vollständig spezialisierten Klassenvorlage zu deklarieren. Ich bin mir nicht sicher, ob ich eine technische Erklärung rechtfertigen könnte. Sie können jedoch einige Erklärungen und Beispiele [in einer Referenz] (http://en.cppreference.com/w/cpp/language/template_specialization) finden. – chris