Explizite Spezialisierungen im std-Namespace: Einschränkungen und Zulassungen
Während Benutzern die Möglichkeit gewährt wird, explizite Spezialisierungen an den std-Namespace anzuhängen, ist dies sicher Vorlagen sind von dieser Praxis ausdrücklich ausgeschlossen.
Verbotene Spezialisierungen
Gemäß dem Standard können die folgenden Vorlagen nicht spezialisiert werden:
- numerische_Limits für nicht-arithmetische Standardtypen wie complex
- shared_ptr, es sei denn, sie erfüllen bestimmte Kriterien für Kopierbarkeit, Zuweisbarkeit und Vergleichbarkeit
- weak_ptr, es sei denn, sie sind kopierbar und zuweisbar
- std::hash, es sei denn, Spezialisierungen entsprechen den Vorlagenanforderungen
- Klassenvorlagen, die in definiert sind (außer common_type)
- Gebietsschemata, die bestimmte Spezialisierungen erfordern
- istreambuf_iterator, der einen trivialen Kopierkonstruktor, Standardkonstruktor und Destruktor haben muss
- komplex für andere Typen als float, double oder long double
- atomar, es sei denn, Spezialisierungen folgen bestimmten Einschränkungen, wie z. B. dem Löschen von Kopierkonstruktoren und Wertkonstruktoren
- unary_function und Binary_function, die veraltet sind und nicht spezialisiert werden können
Übergreifende Überlegungen
Zusätzlich zu diesen spezifischen Verboten bietet der Standard allgemeine Richtlinien für das Hinzufügen zum std-Namespace:
- Deklarationen oder Definitionen zu std oder seine Unter-Namespaces sollten nicht hinzugefügt werden, es sei denn, dies wird ausdrücklich angegeben.
- Vorlagenspezialisierungen sind nur zulässig, wenn sie von einem benutzerdefinierten Typ abhängen und die Bibliotheksanforderungen erfüllen.
- Member-Funktionsspezialisierungen für Standardbibliotheken Klassen, Member-Funktionsvorlagen und Member-Klassenvorlagen sind verboten.
- Explizite Vorlageninstanziierungen sind nur zulässig, wenn sie von einem benutzerdefinierten Typ abhängen und die Bibliotheksanforderungen erfüllen.
Durch Einhaltung Aufgrund dieser Einschränkungen können Entwickler sicherstellen, dass ihre Spezialisierungen nicht mit der Integrität und Funktionsfähigkeit der Standardbibliothek im std-Namespace in Konflikt geraten.
Das obige ist der detaillierte Inhalt vonKönnen Sie jede Vorlage im Namensraum „std' spezialisieren? Einschränkungen und Toleranzen bei expliziten Spezialisierungen. 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