Standardvorlagenargumente: Warum auf Klassenvorlagen beschränkt?
In C sind Standardvorlagenargumente nur für Klassenvorlagen zulässig. Diese Einschränkung wirft die Frage auf, warum solche Argumente nicht für Member-Funktionsvorlagen definiert werden können.
Betrachten Sie das folgende Beispiel:
<code class="cpp">struct my_class { template<class T = int> void mymember(T* vec) { // ... } };</code>
In diesem Beispiel wird versucht, einen Standardtyp zu definieren für den Vorlagenparameter T innerhalb einer Member-Funktionsvorlage, diese Syntax ist jedoch von C nicht zulässig. Stattdessen sind Standardvorlagenargumente strikt auf Klassenvorlagen beschränkt.
Begründung hinter der Einschränkung
Das Verbot von Standardvorlagenargumenten für Funktionsvorlagen hat historische Gründe. In frühen Versionen von C waren freistehende Funktionen nicht vollständig in das Vorlagensystem der Sprache integriert. Um die Verwendung von Member-Funktionsvorlagen zu fördern, die als idiomatischer galten, wurden die Standard-Template-Argumente auf Klassenvorlagen beschränkt.
Diese Einschränkung wurde inzwischen jedoch als Einschränkung erkannt, da sie unnötigerweise zwischen Member-Funktionsvorlagen unterscheidet und freistehende Funktionsvorlagen. Bjarne Stroustrup weist in einem Fehlerbericht darauf hin:
„Das Verbot von Standard-Template-Argumenten für Funktions-Templates ist ein übles Überbleibsel... [es] schränkt den Programmierstil erheblich ein, indem freistehende Funktionen unnötigerweise von Mitgliedsfunktionen unterschieden werden.“ ."
C 0x-Update
Als Reaktion auf diese Bedenken führte C 0x Standardvorlagenargumente für freistehende Funktionsvorlagen ein. Diese Änderung ermöglicht mehr Flexibilität und Konsistenz bei der Vorlagenprogrammierung.
Beispiel
Betrachten Sie den folgenden C 0x-Code:
<code class="cpp">template<typename Iterator, typename Comp = std::less< typename std::iterator_traits<Iterator>::value_type>> void sort(Iterator beg, Iterator end, Comp c = Comp()) { ... }</code>
In diesem Beispiel , wird für den Comp-Vorlagenparameter ein Standardvorlagenargument angegeben, das es dem Sortieralgorithmus ermöglicht, standardmäßig die standardmäßige weniger Vergleichsfunktion zu verwenden.
Das obige ist der detaillierte Inhalt vonWarum können in C keine Standardvorlagenargumente für Elementfunktionsvorlagen verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!