Explizite Spezialisierung von Mitgliedsfunktionen für Klassenvorlagen
Die explizite Spezialisierung einer Mitgliedsfunktion in einer Klassenvorlage erfordert, dass die umgebende Klassenvorlage explizit ist auch spezialisiert. Der ursprüngliche Code in der Frage versucht, die Memberfunktion get_as() für double im Kontext des X
Um dieses Problem zu beheben, kann man sowohl die Klassenvorlage als auch die Memberfunktion explizit spezialisieren, wie unten gezeigt:
template <> template <> void X<int>::get_as<double>() { }
Dieser Ansatz spezialisiert das get_as
Wenn die umgebende Klassenvorlage unspezialisiert bleiben soll, können alternative Techniken eingesetzt werden. Eine dieser Methoden beinhaltet die Verwendung von Überladungen, wie dargestellt:
template <class C> class X { template<typename T> struct type { }; public: template <class T> void get_as() { get_as(type<T>()); } private: template<typename T> void get_as(type<T>) { } void get_as(type<double>) { } };
Bei diesem Ansatz wird die Funktion get_as() mit zwei Versionen überladen: einer, die ein generisches Argument akzeptiert, und einer anderen, die speziell den Fall von Double behandelt. Dies ermöglicht eine explizite Spezialisierung der Mitgliedsfunktion, ohne dass eine Spezialisierung der umgebenden Klassenvorlage erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie kann man Mitgliedsfunktionen in Klassenvorlagen explizit spezialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!