SO上のスレッドは、extending std
is UB(もちろん、あなたが標準的な作家でない限りはOKです)と言います。しかし時々、std
は喜んで拡張されます。いつそれはいいですか?C++ `std`名前空間を拡張するのはいいですか?
答えて
ためstd::hash
の独自のspecialzations std
名前空間に定義を追加するためにOKである場合のみ、すでに名前空間に存在するテンプレートの特殊化と明示的にテンプレートをインスタンス化します。ただし、ユーザー定義の型に依存している場合のみです。
[namespace.std](標準草案):特に指定のない限り、それは名前空間stdまたは名前空間std内の名前空間に宣言や定義を追加した場合
:
C++プログラムの動作は未定義です。プログラムは、宣言がユーザ定義型に依存していて、専門化が元のテンプレートの標準ライブラリ要件を満たし、明示的に禁止されていない場合にのみ、標準ライブラリテンプレートのテンプレート特殊化を名前空間stdに追加できます。
Cの挙動が
(2.1)明示的な標準ライブラリクラステンプレートのメンバー関数の特殊化、または
(2.2)任意の明示的な特殊化を宣言した場合++プログラムが未定義
(2.3)標準ライブラリクラスまたはクラステンプレートのメンバクラステンプレートの明示的または部分的な特殊化。
宣言がユーザー定義型の名前に依存し、インスタンス化が元のテンプレートの標準ライブラリ要件を満たしている場合にのみ、プログラムは標準ライブラリで定義されたテンプレートを明示的にインスタンス化できます。
明示的にユーザ定義型のために拡張するように設計されている標準テンプレートの一例として
std::hash
と
std::iterator_traits
。
cpp参照からの平文コピー... – Walter
ありがとう、私は@ Jarod42から "期待している' std'のもののリストを尋ねようとしていましたが、これで十分です。 –
C++ 11の 'make_unique'関数で' std'名前空間を拡張しました。[here](http://stackoverflow.com/questions/17902405/how-to-implement-make-unique-function-in -c11)。これは大丈夫ですか? –
カスタムデータ型にテンプレートの特殊化を設定できます。一例として、
:std::unordered_map
- 1. 名前空間QScriptEngine拡張
- 2. Python拡張モジュールパッケージ構造(名前空間)
- 3. Xamarin Microcharts拡張名前空間が認識されない
- 4. DelphiでWindowsシェル名前空間拡張を作成するにはどうすればよいですか?
- 5. 拡張メソッドの名前空間とスポンサークラスの命名規則
- 6. Windows 7の統合で名前空間拡張を書く
- 7. C#System.Typeは名前空間ですか?
- 8. javascriptの名前空間の内部でクラスを拡張するには?
- 9. System.Collectionsは「システム名前空間の名前空間」ですか?
- 10. シェルの名前空間拡張がWindows 7で読み込まれない
- 11. C++名前空間との違いは何ですか
- 12. 'std'以外のC++で役に立つ名前空間
- 13. C++での名前空間
- 14. エラー:名前空間の「スレッド」「STD」のタイプ
- 15. C#で新しい名前空間を追加するには
- 16. C++ - 名前空間
- 17. 名前空間のないC#コード?
- 18. 匿名名前空間はすべての名前空間を囲んでいますか?
- 19. 名前空間 'std'の 'vector'がタイプの名前ではありません
- 20. `round`を名前空間stdに入れることは可能ですか?
- 21. C#拡張子のない名前でDirectory.GetFiles()をソート
- 22. なぜビジュアルスタジオコードは、coutがstd名前空間のメンバーではないことを伝えていますか?
- 23. コンパイルエラー:名前空間 'std'の 'function'がテンプレートタイプの名前ではありません。
- 24. C#名前空間のガイドライン
- 25. C++ - クラスの名前空間
- 26. C#XPATHの名前空間
- 27. std名前空間でC関数を使うべきでしょうか?
- 28. Mysql空間拡張
- 29. ネストされたstdとposixの名前空間は未定義ですか?
- 30. XmlSampleGenerator名前空間は何ですか?
related/dupe:http://stackoverflow.com/questions/320798/adding-types-to-the-std-namespace – NathanOliver
@NathanOliverは関連していますが、欺瞞ではありません。これはまったく新しい質問ですが、私は驚いています。しかし、それは間違いなく良いものです。 – Walter
あなたが間違いなく行うことができるのは、例えば 'std :: numeric_limits'のような特定のテンプレートのための特殊化を提供することです。 –
Walter