C++ でのメタプログラミングの多くの例を見た後、クラスの多くのプロパティ (型がテンプレートの特殊化であるかどうかを知るなど) を把握したり、クラスが特定のネストされた型を組み込んでいるかどうかを知ることができます。しかし、最後のものの逆を決定するテストまたは特性を書くことが可能かどうか疑問に思っていましTypeた.classstruct
つまり、次の疑似コードに相当するものを探しています。
template <typename Type> struct is_nested {
enum { value = {__some magic__} };
};
typedef int type1;
struct Something { typedef int internal_type; };
typedef Something::internal_type type2;
//...later, likely at a different scope
is_nested< int >::value; // yields false
is_nested< std::vector<int>::iterator >::value; // yields true
is_nested< type1 >::value; // yields false
is_nested< type2 >::value; // yields true
sizeofはい/いいえテストを実装するために使用できることはわかってTypeおり、それらのテストの一部であると推測しますが、式を形成できるように、ある種の「実行可能なタイプ」をテストにプラグインする方法がわかりませんのようにAnytype::Type。
テンプレート
構造体 is_nested
{
typedef char はい;
typedef struct { char u[2]; } 番号;
// ここに問題があります
???? static はい test( char [ sizeof(Anytype::Type) ] ) ;
???? 静的テストなし(...);
公衆:
enum { 値 = sizeof(test(0)) == sizeof(char) };
};
(私は、どの型が入れ子になるかは気にしないし、知ることもできないことに注意してください。重要なのは、それが何かTypeに入れ子にされているかどうかだけです。つまり、この特性はにのみ依存する必要があります。)Type
私は C++11 または C++03 の C++ ソリューションを探していますが、最初のケースでは、バックポート可能であればもっと歓迎します。