std 名前空間の特殊化されたテンプレート
ユーザーは std 名前空間に明示的な特殊化を追加できますが、特定のテンプレートは制限されています。これらの制限により、標準ライブラリの動作の一貫性と明確な定義が確保されます。
禁止された特殊化:
C 標準によれば、次のテンプレートは特殊化できません。 :
-
numeric_limits: 非算術標準型 (complex など) では禁止されています。
-
shared_ptr: 特殊化は必須ですCopyConstructible、CopyAssignable、LessThanComparable であり、bool に変換可能です。
-
weak_ptr: 特殊化は CopyConstructible および CopyAssignable である必要があります。
-
hash: 特殊化は満たす必要があります。クラス テンプレート ハッシュの要件。
-
のクラス テンプレート: これらのテンプレートに特殊化が追加された場合、プログラムの動作は未定義です。
-
複雑: float、double、long double 以外の型については未定義です。
-
アトミック: 特殊化には、削除されたコピー コンストラクター、コピー代入演算子、および constexpr 値コンストラクターが必要です。
-
Unary_function および binary_function: 非推奨であり、特殊化すべきではありません。
追加の制限:
さらに、標準では以下:
- 特定の要件を満たさない、std 名前空間またはサブ名前空間への宣言または定義の追加。
- 標準ライブラリ クラスのメンバー関数またはメンバー テンプレートの明示的な特殊化。
- 標準ライブラリ クラスのメンバー クラス テンプレートの明示的または部分的な特殊化。
許可される特殊化:
テンプレートの特殊化は、次の場合にのみ許可されます。
- これらは、ユーザー定義の型に依存します。
- これらは、元のテンプレートの標準ライブラリ要件に準拠します。
- 上記で概説したように、明示的に禁止されていません。
これらの制限に従うことで、プログラマは std 名前空間と標準ライブラリ全体の整合性と予測可能性を確保できます。
以上が「std」名前空間内のすべてのテンプレートを特殊化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。