ホームページ  >  記事  >  バックエンド開発  >  std 名前空間内でテンプレートを特殊化する場合の制限は何ですか?

std 名前空間内でテンプレートを特殊化する場合の制限は何ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-30 18:59:30286ブラウズ

 What are the Restrictions on Specializing Templates within the std Namespace?

std 名前空間内の特殊化の制限

std 名前空間では、テンプレートの明示的な特殊化が許可されていますが、特定の制限が存在します。

特殊化が禁止されているテンプレート:

C 標準によれば、次のテンプレートは std 名前空間内で特殊化できません:

  • 非対応の numeric_limits -算術型 (例: complex): 特殊化できるのは算術型のみです。
  • shared_ptr およびweak_ptr: コピー可能性、代入可能性、および比較に関する特定の要件を満たす必要があります。
  • ハッシュ: 特殊化は、標準ハッシュ クラス テンプレートの要件に準拠する必要があります。
  • 型特性 (): 特殊化の動作明示的に許可されない限り未定義です (例: 特定の common_type 特殊化のみが許可されます)。
  • Locales: 必要な特殊化があります。
  • istreambuf_iterator: が必要です。単純なコピー コンストラクター、デフォルト コンストラクター、およびデストラクター。
  • 非浮動小数点型の複合体: 他の型の特殊化の定義は無意味とみなされます。
  • アトミック: コピー操作と constexpr 値コンストラクターを削除する必要があります。
  • unary_function および binary_function: 特殊化は非推奨であり、禁止されています。

全般制限事項:

  • いかなる特殊化も元のテンプレート要件と競合してはなりません。
  • 明示的に指定されない限り、標準ライブラリ テンプレートの明示的な特殊化とインスタンス化は禁止されています。
  • 標準ライブラリ クラスのメンバー関数、関数テンプレート、またはメンバー クラス テンプレートの明示的な特殊化は、未定義の動作です。

以上がstd 名前空間内でテンプレートを特殊化する場合の制限は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。