Standard-Vorlagenargumente: Warum auf Klassenvorlagen beschränkt?
Trotz der Bequemlichkeit, die Standard-Vorlagenargumente bieten, sind sie seltsamerweise auf Klassenvorlagen beschränkt , sodass sich Programmierer fragen, warum sie nicht auf Member-Funktionsvorlagen angewendet werden können.
Das Argument für Standardvorlagenargumente in Funktionsvorlagen
Betrachten Sie das Beispiel einer my_class mit einem Member Funktionsvorlage:
<code class="cpp">struct my_class { template<class T = int> void mymember(T* vec) { // ... } };</code>
Intuitiv ist die Angabe eines Standardtyps für T in der Member-Funktionsvorlage sinnvoll. C erzwingt jedoch die Einschränkung, dass Standardvorlagenargumente nur für Klassenvorlagen zulässig sind.
Der Grund für die Einschränkung
Die Einschränkung ergibt sich aus historischen Gründen, als es freistehende Funktionen gab gelten als den Mitgliedsfunktionen unterlegen. Dadurch, dass alle Vorlagenargumente aus Funktionsargumenten abgeleitet werden mussten, wurde eine konsistente Behandlung sichergestellt.
Die Zukunft der Standardvorlagenargumente in Funktionsvorlagen
C 0x erkannte die Einschränkungen der bestehenden Einschränkung. Die Einbeziehung von Standard-Vorlagenargumenten für Funktionsvorlagen erhöht die Codierungsflexibilität und stimmt mit dem STL-Programmierstil überein.
Laut Bjarne Stroustrup, dem Befürworter dieser Änderung, ist das Verbot von Standard-Vorlagenargumenten für Funktionsvorlagen „ein Missstand“. Rest." Er argumentiert, dass dadurch freistehende Funktionen unnötig von Mitgliedsfunktionen unterschieden werden, was es schwierig macht, die Konsistenz im Code aufrechtzuerhalten.
Vorteile von Standardvorlagenargumenten in Funktionsvorlagen
Die Einführung von Standard-Vorlagenargumente in Funktionsvorlagen ermöglichen ein optimiertes und intuitiveres Codierungserlebnis. Betrachten Sie beispielsweise den Fall einer Sortierfunktion:
<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>
Mit dem Standardvorlagenargument für Comp kann die Sortierfunktion mit oder ohne expliziten Komparator aufgerufen werden, was die Syntax vereinfacht und die Lesbarkeit des Codes erhöht.
Das obige ist der detaillierte Inhalt vonWarum sind Standardvorlagenargumente nur auf Klassenvorlagen in C beschränkt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!