名前空間 std の特殊化に関する制限
はじめに
C では std 名前空間が重要です。基本的なライブラリとテンプレートを収容します。ただし、ユーザーは、この名前空間内で許可されるカスタマイズと禁止されるカスタマイズの境界線がどこにあるのか疑問に思うかもしれません。この記事では、std で特殊化できないテンプレートについて説明します。
禁止されたテンプレート
C 標準によれば、std 内の特定のテンプレートは明示的に特殊化できません。これらには以下が含まれます:
-
numeric_limits: 非算術標準型 (complex など) では禁止
-
shared_ptr: 必須CopyConstructibility、CopyAssignability、LessThanComparability
-
weak_ptr: CopyConstructibility と CopyAssignability が必要
-
std::hash: 特殊化はハッシュ クラス テンプレートの要件を満たす必要があります
-
: この副節内の任意のクラス テンプレートに特殊化を追加する未定義の動作 (限定された common_type 特殊化を除く)
-
ロケール: 特定必要な特殊化が存在します
-
istreambuf_iterator: 簡単なコピー コンストラクター、constexpr デフォルト コンストラクター、および簡単なデストラクターが必要です
-
complex: 他の型でインスタンス化するための未定義の効果float、double、または long double よりも
-
atomic: 削除されたコピー コンストラクター、削除されたコピー代入演算子、および constexpr 値コンストラクター
-
unary_function が必要です。 binary_function: 非推奨です。特殊化することはできません
一般的な制限
C 標準では、禁止されているテンプレート以外にも次の制限が強調されています。
- 明示的に指定されていない限り、std またはそのサブ名前空間内で何かを宣言または定義する未定義の動作。
- 特殊化は、ユーザー定義型に依存し、元のテンプレートの標準要件を満たす場合にのみ std に追加できます。
- メンバー関数、メンバー関数テンプレート、または標準ライブラリ クラスのメンバー クラス テンプレートの明示的な特殊化は禁止されています。
- 明示的なインスタンス化は、ユーザー定義の型名に依存し、標準を満たす場合にのみ許可されます。元のテンプレートの要件。
以上がC に特化できない「std」名前空間のテンプレートはどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。