explizite Spezialisierung außerhalb des Namensspace Scope: Ein Fehler in nicht standardmäßigem G
c Vorlage Die Programmen von Vorlagen beinhaltet die explizite Spezialisierung von Klassenmitgliedern für effiziente Codegeneration. Die Platzierung explizite Spezialisierungen ist jedoch entscheidend, wie der folgende Code -Snippet zeigt:
templateclass CConstraint { // ... template void Verify(int position, int constraints[]) { } template void Verify (int, int[]) { } };
, wenn mit g kompiliert wird, führt dieser Code in den Fehler:
Explicit specialization in non-namespace scope 'class CConstraint'
Um diesen Fehler zu verstehen, müssen wir das C-Standard untersuchen, was die explizite Spezialisierungen innerhalb des Namenspace des Namenspace des Vorschlags des Vorschlags des Vorschlags des Vorschlags, dessen Vorschriften eingestellt werden muss. Im obigen Beispiel wird die CConstraint in keinem Namespace deklariert, und daher ist die explizite Spezialisierung von verifizieren
VC-Compiler sind jedoch in diesem Fall nicht konform, sodass explizite Spezialisierungen außerhalb des Namensspace-Bereichs ermöglichen. Dieses Verhalten ist nicht standardmäßig und sollte nicht verlassen werden.
Lösung:
, um dieses Problem zu lösen und die Einhaltung des C-Standards der C-Standard zu gewährleisten, muss explizite Spezialisierungen im selben Namespace als Vorlage deklariert werden, das sie spezialisiert haben. Hier ist eine korrigierte Version des Code:
namespace MyNamespace { templateclass CConstraint { // ... template void Verify(int position, int constraints[]) { } template void Verify (int, int[]) { } }; }
Durch die Einzahlung von Cconstraint im ManameSpace -Namespace stellen wir sicher, dass seine explizite Spezialisierungen auch in diesem Namespace deklariert werden, wobei der Kompilierungsfehler behoben wird. Antwort:
Namespace Detail {
Vorlage
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3