is_default_constructibleやis_move_constructibleなどのテンプレートが、クラスが "デフォルト"とマークされているかどうか、またはムーブコンストラクタであるかどうかをクラス内で調べる方法を教えてください。C++ - is_default_constructibleはどのように実装されていますか?
答えて
コンパイル時に式の妥当性を確認するには、複数の方法があります。 detection idiomは、あなたが言及した特性を実装するために使用できるC++ 11のテクニックです。ここでは例だ(これは近似値で、実際のis_default_constructible
はもっと複雑です):"checking expression validity in-place with C++17":
template <class T>
using default_constructible_impl = decltype(T{});
template <class T>
using is_default_constructible = std::is_detected<default_constructible_impl, T>;
は、ここで私はあなたが有用見つけるかもしれない被写体に書いた記事です。そのタイトルが示唆しているものの、C++ 11とC++ 14のテクニックもカバーしています。
このような特質のすべてがこのように機能するわけではないことに注意してください。stdライブラリはC++で実装できない特性を必要とします。そして、実装可能ないくつかの特性は、何とか(具体的な例として、msvcのチートでの整数シーケンスの生成として)不正を行うことによって実装される可能性があります。 – Yakk
いいえ、is_default_constructibleではありません。そして 'std :: is_detected_t'はありません。 –
is_default_constructible<T>
デフォルトのコンストラクタ(= default
)は認識されません。 T()
が有効な初期化(注:T{}
ではない)かどうかは、がほとんどです。
最初の近似値は次のとおりです。
template<typename T, typename = void>
struct is_default_constructible : std::false_type { };
template<typename T>
struct is_default_constructible<T, std::void_t<decltype(T())>> : std::true_type { };
例void
のために構築可能デフォルトけどvoid()
が有効な式ですされていないため、追加的なニュアンスは、標準バージョンであります。
- 1. @privateはどのように実装されていますか?
- 2. getchar()はどのように実装されていますか?
- 3. Objective Cではカテゴリはどのように実装されていますか?
- 4. BigDecimalはどのように実装されていますか?
- 5. HttpSessionはどのように実装されていますか?
- 6. removeEventListenerはどのように実装されていますか?
- 7. INativeElementViewはどのように実装されていますか?
- 8. PTRACE_SINGLESTEPはどのように実装されていますか?
- 9. テンソルフローはどのように実装されていますか?
- 10. \ bはどのように実装されていますか?
- 11. フィルタはどのように実装されていますか?
- 12. MarshalByRefObjectはどのように実装されていますか?
- 13. クロスバリデーションはどのように実装されていますか?
- 14. タスクスケジューリングはどのように実装されていますか?
- 15. os.path.fileはどのように実装されていますか?
- 16. モバイルバックグラウンドループはどのように実装されていますか?
- 17. C#4でメメントパターンはどのように実装されていますか?
- 18. String.LengthはC#でどのように実装されていますか?
- 19. Collection.sortがどのように実装されていますか?
- 20. データベーステンプレートライブラリ(C++)でvariant_rowがどのように実装されていますか?
- 21. Wami Recorderは実際にどのように実装されていますか?
- 22. プロトコルはどのように内部実装されていますか?
- 23. pythonのfractions.limit_denominatorはどのように実装されていますか?
- 24. golangのselect文はどのように実装されていますか?
- 25. 通常、ヒープはどのように実装されていますか?
- 26. MPI_SendはどのようにMPI_Characterで実装されていますか? FORTRANで
- 27. OSレベルでスリープはどのように実装されていますか?
- 28. ノンブロッキングIOはどのように実装されていますか?
- 29. 動的バインディングはどのようにJavaで実装されていますか?
- 30. Javaインターフェイスはどのように内部実装されていますか? (vtables?)
'is_default_constructible'はコンストラクタ' = default'をテストしませんが、コンストラクタがパラメータなしで使用できるかどうかをテストします。それでもユーザー定義が可能です。 –