Heim  >  Artikel  >  Backend-Entwicklung  >  Kann C 17 Vorlagenargumente bei der Ableitung von Klassenvorlagenargumenten (CTAD) teilweise abziehen?

Kann C 17 Vorlagenargumente bei der Ableitung von Klassenvorlagenargumenten (CTAD) teilweise abziehen?

DDD
DDDOriginal
2024-10-25 06:38:02640Durchsuche

Can C  17 Partially Deduct Template Arguments in Class Template Argument Deduction (CTAD)?

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!

Stellungnahme:
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