Überwindung redundanter Vorlagenparameter in Klassenvorlagenkonstruktoren in C 20
In C 20 hat die Deklaration von Klassenvorlagenkonstruktoren eine subtile Änderung erfahren wirkungsvolle Veränderung. Zuvor konnten Konstruktoren für Klassenvorlagen optional die Vorlagenparameterliste in ihren Deklarator einschließen, wie im folgenden Codeausschnitt zu sehen ist:
template<typename T> struct S { S<T>(); };
Diese Vorgehensweise ist jetzt jedoch in C 20 veraltet. Der obige Code würde dies tun führt jetzt zu einem Compilerfehler im gcc-Trunk mit -std=c 20. Allerdings würde es immer noch im Clang-Trunk mit demselben kompiliert werden Standard.
Begründung für die Änderung
Die Entfernung redundanter Vorlagenparameter in Klassenvorlagenkonstruktoren behebt eine potenzielle Fehlerquelle. Indem stattdessen die explizite Verwendung des injizierten Klassennamens erforderlich ist, bleibt die einfache Absicht bei der Deklaration von Konstruktoren in Klassenvorlagen erhalten.
Auswirkungen auf vorhandenen Code
Diese Änderung kann Auswirkungen haben Auswirkungen auf bestehende Codebasen, die auf der zuvor gültigen Syntax basieren. Gültiger C 2017-Code wie das obige Beispiel kann möglicherweise nicht mehr unter dem C 20-Standard kompiliert werden.
Lösung für betroffenen Code
Um dieser Änderung Rechnung zu tragen, kann die folgende alternative Syntax verwendet werden verwendet werden:
template<typename T> struct S { S(); // Constructor declaration using the injected class name };
Alternativ kann eine Konstruktorüberladung erfolgen, wenn bestimmte Vorlagenargumente erforderlich sind eingesetzt:
template<typename T> struct S { S<T>(); // Constructor declaration with explicit template arguments S<int>(); // Overload for specific template argument };
Durch die Einhaltung dieser Syntaxrichtlinien können Codebasen die Kompatibilität mit dem aktualisierten C 20-Standard aufrechterhalten.
Das obige ist der detaillierte Inhalt vonWie deklariere ich Klassenvorlagenkonstruktoren in C 20 korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!