Spezialisierung im std-Namespace: Einschränkungen und Zulassungen
Trotz der Möglichkeit, explizite Spezialisierungen zum std-Namespace hinzuzufügen, gelten für bestimmte Vorlagen explizite Verbote . Das Verständnis dieser Einschränkungen ist von entscheidender Bedeutung, um die Gültigkeit von Code sicherzustellen, der Standard-Namespace-Spezialisierungen verwendet.
Spezialisierung für Vorlagen verboten
-
numeric_limits: Nicht zulässig für nicht-arithmetische Standardtypen (z. B. complex).
-
shared_ptr: Muss CopyConstructible, CopyAssignable, LessThanComparable und in bool konvertierbar sein.
-
weak_ptr: Muss CopyConstructible sein Und CopyAssignable.
-
std::hash: Spezialisierungen müssen die Anforderungen des Klassenvorlagen-Hashs erfüllen.
-
type_traits: Explizite Spezialisierungen aller darin enthaltenen Klassenvorlagen sind undefiniert, sofern nicht anders angegeben.
-
Gebietsschemata: Haben erforderliche Spezialisierungen.
-
istreambuf_iterator: Erfordert einen trivialen Kopierkonstruktor, einen constexpr-Standardkonstruktor und trivial Destruktor.
-
komplex: Nur Float-, Double- und Long-Double-Spezialisierungen sind zulässig.
-
atomic: Spezialisierungen müssen einen gelöschten Kopierkonstruktor haben, Kopierzuweisungsoperator und constexpr-Wertkonstruktor.
-
unary_function und binäre_Funktion: Veraltet und sollte nicht spezialisiert werden.
Zusätzliche Einschränkungen
- Gemäß Klausel 17.6.4.2.1 ist das Verhalten undefiniert beim Hinzufügen von Deklarationen oder Definitionen zum Namespace std oder seinen Unternamespaces. Ausnahmen gelten nur für Vorlagenspezialisierungen, die von benutzerdefinierten Typen abhängen und Standardanforderungen erfüllen.
- Es ist verboten, eine Mitgliedsfunktion einer Standardbibliotheksklassenvorlage, einer Mitgliedsfunktionsvorlage oder einer Mitgliedsklassenvorlage explizit zu spezialisieren.
Zur Spezialisierung zugelassene Vorlagen
Vorlagen, die nicht ausdrücklich verboten sind, können spezialisiert werden, wenn sie darauf angewiesen sind benutzerdefinierte Typen und erfüllen die Standardanforderungen für die Originalvorlage.
Das obige ist der detaillierte Inhalt vonWelche Einschränkungen und Zulassungen gibt es für die Spezialisierung innerhalb des std-Namespace?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!