2010-10-29 65 views
1

我懷疑在目前的C++標準下這是不可能的,但我仍然會問。has_member_of_type - C++中的模板元編程

我想要實現的是讓編譯器在編譯期間判斷出類是否包含Base類型的任何成員變量(及其派生類)。

例如

struct Base 
{ 
}; 

struct Derived : public Base 
{ 
}; 

struct Foo 
{ 
    int x; 
    Derived a; 
    Derived b; 
}; 

struct Bar 
{ 
    int x; 
}; 

我想沿着線的東西,

has_member_of_type<Base, Foo>::value 

在這種情況下將是真實的(一個或多個成員瓦爾有基地的基本類型),而其他任何東西(包括基本類型)會被認爲是錯誤的。

例如

has_member_of_type<Base, char>::value = false 
has_member_of_type<Base, Bar>::value = false 

請注意,我試圖用has_member_of_type我在圖書館發現和使用不同的代碼分支,如果用戶類有某種類型的成員變量。

回答

2

不,這是不可能的。你甚至不能訪問成員(除非被告知他們的名字),更不用說探究他們的類型。