2013-12-22 2 views
10

私はそれらがインスタンス化するタイプに関する情報をエンコードすると理解していますが、どのように動作しますか?例えば、タイプ形質std::is_classと言ってください。どのように仕事をしていますか?すべての実装は空の構造体のように見えますが、私は頭を傷つけていることを認めなければなりません。C++のタイプの特性

これらの名前は十分にわかりやすいので、意味は分かりますが、タイプ特性を使用する典型的なシナリオは何ですか?

私は対象に関する入門資料(またはSOに関する質問)が見つかりません。ポインタは高く評価されます。

+0

これらはコンパイラによって実装できます(通常のクラステンプレート定義のように見えますが)。しかし、私は 'is_class'の実装がAlexandrescuの" Modern C++ Design " –

+1

に記述されていると思います。http://stackoverflow.com/q/20181702/420683 – dyp

答えて

6

std::is_classのようないくつかの型特性は、コンパイラ組み込み関数(別名組み込み関数)を使用します。コンパイラの特別なサポートがなければ、自分で書くことはできません。

タイプ特性は、一般的に汎用コンテキストで有用です。タイプのプロパティに基づいて特性を特化したり、テンプレート引数に制限を課したりすることができます。たとえば、std::copyの実装では、イテレータがPODへのポインタであるときに、明示的なループの代わりにstd::memcpyを内部的に使用することがあります。これはSFINAEで実現できます。

関連する問題