std 名前空間の明示的な特殊化: 制限と許可
ユーザーには std 名前空間に明示的な特殊化を追加する機能が付与されていますが、テンプレートはこの実践から明示的に禁止されています。
禁止された特殊化
標準に従って、次のテンプレートは特殊化できません:
- numeric_limits complex
- shared_ptr などの非算術標準型の場合、コピー可能性、代入可能性、比較可能性の特定の基準を満たさない場合
- weak_ptr (コピー可能および代入可能である場合を除く)
- std::hash (特殊化がテンプレート要件に準拠している場合を除く)
- で定義されたクラス テンプレート(common_type を除く)
- 特定の特殊化を必要とするロケール
- istreambuf_iterator。簡単なコピー コンストラクター、デフォルト コンストラクター、デストラクターが必要です。float 以外の型の場合は
- 複合double、または long double
- アトミック。特殊化がコピー コンストラクターと値コンストラクター
- unary_function および binary_function を削除するなどの特定の制約に従う場合を除きます。これらは非推奨で特殊化できません
全体的な考慮事項
これらの特定の禁止事項に加えて、標準では、std 名前空間に追加するための一般的なガイドラインが提供されています。
- std への宣言または定義明示的に指定しない限り、またはそのサブ名前空間は追加しないでください。
- テンプレートの特殊化は、ユーザー定義型に依存し、ライブラリの要件を満たす場合にのみ許可されます。
- 標準ライブラリのメンバー関数の特殊化クラス、メンバー関数テンプレート、およびメンバー クラス テンプレートは禁止されています。
- 明示的なテンプレートのインスタンス化は、ユーザー定義型に依存し、ライブラリ要件を満たす場合にのみ許可されます。
遵守することによりこれらの制限があるため、開発者は自分の専門化が std 名前空間の標準ライブラリの整合性や操作性と競合しないようにすることができます。
以上が「std」名前空間内のすべてのテンプレートを特殊化できますか? 明示的特殊化の制限と許容事項の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。