2011-07-01 7 views
3

クラスに特定のサブクラス/タイプがある場合は、SFINAEのトリックを知ることができますか?何かのように、後クラスにサブクラス/型が含まれているかどうかを調べる方法は?

template<typename TYPE> // searches for "my_type" 
struct has_inner_type { 
    enum { value = <???> }; 
}; 

は例です:

struct A { 
    class my_type {}; // has_inner_type::value = true 
}; 
struct B { }; // has_inner_type::value = false 
struct C { typedef int my_type; }; // has_inner_type::value = true 

私はいくつかのトリックを試してみましたが、ほとんど期待コンパイルエラーと短い落ちます。 使用法:

bool b = has_inner_type<A>::value; // with respect to "my_type" 

編集:それはhas_inner_typeに2番目のパラメータとしてmy_typeを渡すことは不可能だと思えるように私は、私の質問を再編集しました。だから今のところ質問は特定のタイプだけを見つけることですmy_type。私はtried this codeを持っていますが、これはうまくいきません。

+0

特定の名前の内部型か内部型かを知りたいですか? –

+0

エラーは何ですか? – AJG85

+0

@Martinho、私は私の質問を再編集しました。私は指定された名前だけで検索したい。ご迷惑をおかけして申し訳ありません。 @ AJG85、私はそれを実装する正しい方法を見つけることができないので、エラーは明らかです。そのようなエラーは言及する価値がありません。まだそれに取り組んでいます。 – iammilind

答えて

0

質問に投稿したウィキペディアのリンクには以下の回答があります! (@n.mに感謝。)

template <typename T> 
struct has_inner_type 
{ 
    typedef char yes[1]; 
    typedef char no[2]; 

    template <typename C> static yes& test(typename C::my_type*); 
    template <typename> static no& test(...); 

    static const bool value = sizeof(test<T>(0)) == sizeof(yes); 
}; 

がここthe demoです。

関連する問題