2011-07-01 174 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" 

編輯:我已經重新編輯我的問題,因爲它似乎是不可能通過my_type作爲第二個參數has_inner_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

相關問題