Spezialisierte Vorlagen im std-Namespace
Benutzer können dem std-Namespace explizite Spezialisierungen hinzufügen, bestimmte Vorlagen sind jedoch tabu. Diese Einschränkungen stellen sicher, dass das Verhalten der Standardbibliothek konsistent und klar definiert bleibt.
Verbotene Spezialisierungen:
Gemäß dem C-Standard können die folgenden Vorlagen nicht spezialisiert werden :
-
numeric_limits: Verboten für nicht-arithmetische Standardtypen (z. B. complex).
-
shared_ptr: Spezialisierungen müssen vorhanden sein Seien Sie CopyConstructible, CopyAssignable, LessThanComparable und konvertierbar in bool.
-
weak_ptr: Spezialisierungen müssen CopyConstructible und CopyAssignable sein.
-
hash: Spezialisierungen müssen übereinstimmen die Anforderungen des Klassenvorlagen-Hashs.
-
Klassenvorlagen in : Das Programmverhalten ist undefiniert, wenn Spezialisierungen für diese Vorlagen hinzugefügt werden.
-
Komplex: Nicht definiert für andere Typen als Float, Double oder Long Double.
-
Atomar: Spezialisierungen müssen einen gelöschten Kopierkonstruktor, einen Kopierzuweisungsoperator und einen Constexpr-Wertkonstruktor haben.
-
Unäre_Funktion und binäre_Funktion: Veraltet und sollte nicht spezialisiert werden.
Zusätzliche Einschränkungen:
Darüber hinaus verbietet der Standard die Folgendes:
- Hinzufügen von Deklarationen oder Definitionen zum std-Namespace oder beliebigen Unternamespaces, ohne bestimmte Anforderungen zu erfüllen.
- Explizite Spezialisierung von Mitgliedsfunktionen oder Mitgliedsvorlagen von Standardbibliotheksklassen.
- Explizite oder teilweise Spezialisierung von Mitgliedsklassenvorlagen von Standardbibliotheksklassen.
Zulässige Spezialisierungen:
Vorlagenspezialisierungen sind nur zulässig, wenn:
- Sie hängen von einem benutzerdefinierten Typ ab.
- Sie halten sich an die Standardbibliotheksanforderungen für die Originalvorlage.
- Sie sind nicht ausdrücklich verboten, wie oben beschrieben.
Durch die Einhaltung dieser Einschränkungen können Programmierer die Integrität und Vorhersehbarkeit des std-Namespace und der Standardbibliothek als Ganzes sicherstellen.
Das obige ist der detaillierte Inhalt vonKönnen Sie jede Vorlage im Namensraum „std' spezialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!