2010-10-29 36 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

不,这是不可能的。你甚至不能访问成员(除非被告知他们的名字),更不用说探究他们的类型。