Heim > Backend-Entwicklung > C++ > Wie kann man eine Mitgliedsfunktion einer Klassenvorlage korrekt und explizit spezialisieren?

Wie kann man eine Mitgliedsfunktion einer Klassenvorlage korrekt und explizit spezialisieren?

Patricia Arquette
Freigeben: 2024-12-27 22:47:10
Original
649 Leute haben es durchsucht

How to Correctly Explicitly Specialize a Member Function of a Class Template?

Vorlagenklasse mit explizit spezialisierter Mitgliedsfunktion

Beim Definieren einer expliziten Spezialisierung für eine Mitgliedsfunktion einer Klassenvorlage tritt eine häufige Gefahr auf, wenn Die umgebende Klassenvorlage ist ebenfalls eine Vorlage. Um das Problem zu verstehen, betrachten Sie das folgende Beispiel:

#include <iostream>
#include <cmath>

template <class C> class X {
public:
   template <class T> void get_as();
};

template <class C>
void X<C>::get_as<double>() {}  // Explicit specialization for double

int main() {
   X<int> x;
   x.get_as();
}
Nach dem Login kopieren

Dieser Code versucht, die Memberfunktion get_as explizit für double für die X-Klassenvorlage zu spezialisieren. Dieser Ansatz führt jedoch zu Compilerfehlern, da die umgebende Klassenvorlage nicht explizit spezialisiert ist.

Falscher Ansatz:

Versuch, die Mitgliedsfunktion explizit zu spezialisieren, ohne die Klasse zu spezialisieren Vorlage, wie unten gezeigt, ist falsch:

template <class C> template<>
void X<C>::get_as<double>() {}
Nach dem Login kopieren

Richtige Lösung:

Um das Problem zu beheben, müssen sowohl die Klassenvorlage als auch die Mitgliedsfunktion explizit spezialisiert werden. Um beispielsweise die Funktion get_as nur für Wenn die Klassenvorlage nicht spezialisiert ist, kann eine Überladung der get_as-Funktion verwendet werden, wie im folgenden Code gezeigt:

template <>
template <class T>
void X<int>::get_as() {}

template <>
void X<int>::get_as<double>() {}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann man eine Mitgliedsfunktion einer Klassenvorlage korrekt und explizit spezialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage