std 名前空間の特殊化: 制限と許可
std 名前空間に明示的な特殊化を追加できるにもかかわらず、特定のテンプレートには明示的な禁止事項があります。 。これらの制限を理解することは、std 名前空間の特殊化を使用するコードの有効性を確保するために重要です。
特殊化が禁止されているテンプレート
-
numeric_limits: ではありません非算術標準型 (complex など) に許可されます。
-
shared_ptr: CopyConstructible、CopyAssignable、LessThanComparable、および bool に変換可能である必要があります。
-
weak_ptr: CopyConstructible および CopyAssignable である必要があります。
-
std::hash: 特殊化は、クラス テンプレート ハッシュの要件を満たす必要があります。
-
type_traits : 内のクラス テンプレートの明示的な特殊化。指定されない限り未定義です。
-
ロケール: 必要な特殊化があります。
-
istreambuf_iterator: 単純なコピー コンストラクター、constexpr デフォルト コンストラクター、および単純なデストラクターが必要です.
-
complex: float、double、long double 特殊化のみが許可されます。
-
atomic: 特殊化には削除されたコピー コンストラクター、コピーが必要です。代入演算子、および constexpr 値コンストラクター。
-
unary_function および binary_function: 非推奨であり、特殊化しないでください。
追加の制限
- 17.6.4.2.1 項に従い、名前空間 std またはそのサブ名前空間に宣言または定義を追加するときの動作は未定義です。例外は、ユーザー定義型に依存し、標準要件を満たすテンプレートの特殊化にのみ適用されます。
- 標準ライブラリ クラス テンプレート、メンバー関数テンプレート、またはメンバー クラス テンプレートのメンバー関数を明示的に特殊化することは禁止されています。
テンプレートの特殊化が許可されています
明示的に禁止されていないテンプレートは、ユーザー定義の型に依存し、元のテンプレートの標準要件を満たしている場合に特殊化できます。
以上がstd 名前空間内の特殊化に対する制限と許容事項は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。