Heim >Backend-Entwicklung >C++ >C-Funktionsvorlagen: Überladung vs. (nicht standardmäßige) Teilspezialisierung?
Funktionsvorlagen: Teilweise Spezialisierung vs. Überladung
In C ist eine teilweise Spezialisierung von Funktionsvorlagen durch den Sprachstandard nicht zulässig. Bestimmte Compiler stellen jedoch möglicherweise Erweiterungen bereit, die dies ermöglichen.
Partielle Spezialisierung definiert
Teilweise Spezialisierung umfasst die Definition einer Vorlage mit einem spezielleren Satz von Vorlagenargumenten als die ursprüngliche Vorlage . Bei Klassenvorlagen bedeutet dies die Angabe spezifischer Werte für einige oder alle Vorlagenparameter.
Beispiel: Teilweise Spezialisierung und Überladung
Der bereitgestellte Code zeigt eine Überladung, nicht eine teilweise Spezialisierung. Die folgenden Funktionen sind definiert:
template<typename T1, typename T2> inline T1 max(T1 const& a, T2 const& b) { return a < b ? b : a; } template<typename T> inline T const& max(T const& a, T const& b) { return 10; }
Während die Vorlagenparameter der zweiten Funktion vom Typ her identisch sind, handelt es sich nicht um eine teilweise Spezialisierung. Es handelt sich um eine separate Funktion, die die erste Funktion überlastet.
Spezialisierung von Funktionsvorlagen
Eine vollständige Spezialisierung von Funktionsvorlagen ist hingegen zulässig. Dabei wird eine Vorlage definiert, bei der alle Vorlagenparameter explizit angegeben werden. Es wird jedoch nicht direkt vom C-Standard unterstützt und ist nur in einigen Compilern als Erweiterung implementiert.
Partielle Spezialisierungs-Compiler-Erweiterungen
In Microsoft Visual Studio 2010 Express , ermöglicht die Compiler-Erweiterung eine teilweise Spezialisierung sowohl für Klassen als auch für Funktionsvorlagen. Dies ist kein Standardverhalten und kann zu Portabilitätsproblemen führen.
Das obige ist der detaillierte Inhalt vonC-Funktionsvorlagen: Überladung vs. (nicht standardmäßige) Teilspezialisierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!