Heim > Artikel > Backend-Entwicklung > Kann C 17 Vorlagenargumente bei der Ableitung von Klassenvorlagenargumenten (CTAD) teilweise abziehen?
Teilweise Ableitung von Klassenvorlagenargumenten in C 17
Die Ableitung von Klassenvorlagenargumenten (CTAD) in C 17 ermöglicht es dem Compiler, daraus Vorlagenargumente abzuleiten die bereitgestellten Argumente. Während diese Funktion einen automatischen Abzug ermöglicht, ist es möglich, Vorlagenargumente teilweise anzugeben und den Rest dem Compiler zum Ableiten zu überlassen?
Teilweiser Abzug in C 17
Derzeit erfordert CTAD die Angabe von „Alles oder nichts“-Vorlagenargumenten. Es gab jedoch Versuche, durch Vorschläge wie P1021R0 einen teilweisen Abzug einzuführen. Obwohl diese Vorschläge nicht angenommen wurden, wurde die Unterstützung für Alias-Vorlagen (P1814) und Aggregate (P1816) in den C 20-Arbeitsentwurf integriert.
Problemumgehungen
In Da es keinen nativen Teilabzug gibt, gibt es hier eine mögliche Problemumgehung:
<code class="cpp">template<class T, class U> using NewBase2 = Base<T, U, double>; // Usage void func() { NewBase2<bool, int> val(1, 2); }</code>
Durch die Einführung von NewBase2 als Alias für Base können Sie die Vorlagenargumente (T und U) teilweise angeben, während der Compiler den Rest ableiten kann eins (V) basierend auf der Verwendung in func().
Hinweis: Diese Problemumgehung erfordert die explizite Angabe der Alias-Vorlagenargumente, was den Zweck von CTAD in gewissem Maße zunichte macht.
Das obige ist der detaillierte Inhalt vonKann C 17 Vorlagenargumente bei der Ableitung von Klassenvorlagenargumenten (CTAD) teilweise abziehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!