Heim > Backend-Entwicklung > C++ > Hauptteil

Warum können wir keinen teilweisen Abzug von Klassenvorlagenargumenten durchführen?

Barbara Streisand
Freigeben: 2024-11-18 05:15:02
Original
149 Leute haben es durchsucht

Why Can't We Have Partial Class Template Argument Deduction?

Teilweise Ableitung von Klassenvorlagenargumenten: Warum das nicht möglich ist

Frühere Bemühungen, die Ableitung von Vorlagenargumenten für Klassenvorlagen einzuführen, zielten darauf ab, ihr Verhalten an das von Funktionsvorlagen anzupassen. Die Veröffentlichung des P0091-Vorschlags brachte jedoch eine wesentliche Einschränkung ans Licht: Die teilweise Ableitung von Klassenvorlagenargumenten ist weiterhin unmöglich.

Betrachten Sie das bereitgestellte Beispiel, in dem ein Klassenvorlagentest definiert ist. Die Hilfsfunktion „Helper“ vereinfacht die Erstellung von Testobjekten, wie aus dem Codeausschnitt hervorgeht, in dem verschiedene Formen der Argumentableitung demonstriert werden.

Während der Code in den meisten Fällen kompiliert wird, treten beim Versuch einer teilweisen Ableitung für Klassenvorlagen Schwierigkeiten auf. Beispielsweise kann Zeile 6 des folgenden Codes nicht kompiliert werden:

int buffer[5];

test<5> b(buffer);      // Type deduced: FAILS.
Nach dem Login kopieren

Dies liegt daran, dass der Compiler den Typparameter T nicht ermitteln kann. Ohne explizite Angabe erwartet der Compiler, dass alle Vorlagenargumente gleichzeitig abgeleitet werden . Dies stellt eine Herausforderung dar, da sich der Abzugsprozess jedes Parameters auf den Abzug anderer Parameter auswirken kann.

Der Bericht von Botond Ballo hebt die Gründe für diese Einschränkung hervor:

Die ursprünglich vorgeschlagene Funktion war enthalten eine Bestimmung zum teilweisen Abzug, bei der Sie einige der Vorlagenargumente explizit angeben und den Rest ableiten lassen. Dies wurde jedoch aufgrund von Bedenken verschoben, dass es in einigen Fällen sehr verwirrend sein kann Fälle:

// Would have deduced tuple<int, string, float>,
// but tuple<int> is a well-formed type in and of itself!
tuple<int> t(42, "waldo", 2.0f);
Nach dem Login kopieren

Während Funktionsvorlagen einen teilweisen Argumentabzug ermöglichen, führte die Mehrdeutigkeit, die durch den teilweisen Abzug in Klassenvorlagen entsteht, zu dessen Ausschluss.

Das obige ist der detaillierte Inhalt vonWarum können wir keinen teilweisen Abzug von Klassenvorlagenargumenten durchführen?. 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