std 名前空間内の特殊化の制限
std 名前空間では、テンプレートの明示的な特殊化が許可されていますが、特定の制限が存在します。
特殊化が禁止されているテンプレート:
C 標準によれば、次のテンプレートは std 名前空間内で特殊化できません:
-
非対応の numeric_limits -算術型 (例: complex): 特殊化できるのは算術型のみです。
-
shared_ptr およびweak_ptr: コピー可能性、代入可能性、および比較に関する特定の要件を満たす必要があります。
-
ハッシュ: 特殊化は、標準ハッシュ クラス テンプレートの要件に準拠する必要があります。
-
型特性 (): 特殊化の動作明示的に許可されない限り未定義です (例: 特定の common_type 特殊化のみが許可されます)。
-
Locales: 必要な特殊化があります。
-
istreambuf_iterator: が必要です。単純なコピー コンストラクター、デフォルト コンストラクター、およびデストラクター。
-
非浮動小数点型の複合体: 他の型の特殊化の定義は無意味とみなされます。
-
アトミック: コピー操作と constexpr 値コンストラクターを削除する必要があります。
-
unary_function および binary_function: 特殊化は非推奨であり、禁止されています。
全般制限事項:
- いかなる特殊化も元のテンプレート要件と競合してはなりません。
- 明示的に指定されない限り、標準ライブラリ テンプレートの明示的な特殊化とインスタンス化は禁止されています。
- 標準ライブラリ クラスのメンバー関数、関数テンプレート、またはメンバー クラス テンプレートの明示的な特殊化は、未定義の動作です。
以上がstd 名前空間内でテンプレートを特殊化する場合の制限は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。