Einschränkungen für Namespace-Standardspezialisierungen
Einführung
Der Standardnamespace ist in C von entscheidender Bedeutung. Unterbringung grundlegender Bibliotheken und Vorlagen. Benutzer fragen sich jedoch möglicherweise, wo die Grenze zwischen zulässigen und verbotenen Anpassungen innerhalb dieses Namensraums verläuft. In diesem Artikel werden die Vorlagen beleuchtet, die nicht auf std spezialisiert werden können.
Verbotene Vorlagen
Gemäß dem C-Standard können bestimmte Vorlagen innerhalb von std nicht explizit spezialisiert werden. Dazu gehören:
-
numeric_limits: Verboten für nicht-arithmetische Standardtypen (z. B. complex)
-
shared_ptr: Erforderlich CopyConstructibility, CopyAssignability und LessThanComparability
-
weak_ptr: Erfordert CopyConstructibility und CopyAssignability
-
std::hash: Spezialisierungen müssen die Anforderungen an Hash-Klassenvorlagen erfüllen
-
: undefiniertes Verhalten zum Hinzufügen von Spezialisierungen für alle Klassenvorlagen in diesem Unterabschnitt (mit Ausnahme begrenzter common_type-Spezialisierungen)
-
Gebietsschemata: Bestimmt Erforderliche Spezialisierungen sind vorhanden
-
istreambuf_iterator: Erfordert trivialen Kopierkonstruktor, constexpr-Standardkonstruktor und trivialen Destruktor
-
komplex: undefinierter Effekt für die Instanziierung mit anderen Typen als Float, Double oder Long Double
-
atomic: Erfordert einen gelöschten Kopierkonstruktor, einen gelöschten Kopierzuweisungsoperator und einen constexpr-Wertkonstruktor
-
unary_function und binary_function: Veraltet; kann nicht spezialisiert werden
Allgemeine Einschränkungen
Über die verbotenen Vorlagen hinaus betont der C-Standard die folgenden Einschränkungen:
- Das ist es undefiniertes Verhalten zum Deklarieren oder Definieren von irgendetwas innerhalb von std oder seinen Unternamensräumen, sofern nicht ausdrücklich angegeben.
- Spezialisierungen können nur zu std hinzugefügt werden, wenn sie von benutzerdefinierten Typen abhängen und die Standardanforderungen für die Originalvorlage erfüllen.
- Explizite Spezialisierungen von Mitgliedsfunktionen, Mitgliedsfunktionsvorlagen oder Mitgliedsklassenvorlagen von Standardbibliotheksklassen sind verboten.
- Explizite Instanziierungen sind nur zulässig, wenn sie von benutzerdefinierten Typnamen abhängen und dem Standard entsprechen Anforderungen an die Originalvorlage.
Das obige ist der detaillierte Inhalt vonWelche Vorlagen im „std'-Namespace können nicht auf C spezialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!