2010-10-29 6 views
1

Je suppose que ce n'est pas possible sous les normes C++ actuelles mais je demanderai quand même. Ce que j'essaye de réaliser est d'obtenir le compilateur pour comprendre pendant la compilation si une classe contient n'importe quelle variable de membre de type Base (avec ses dérivations).has_member_of_type - métaprogrammation de template en C++

par exemple.

struct Base 
{ 
}; 

struct Derived : public Base 
{ 
}; 

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

struct Bar 
{ 
    int x; 
}; 

Je veux quelque chose le long de la ligne de,

has_member_of_type<Base, Foo>::value 

auquel cas serait vrai (un ou plusieurs vars membres ont un type de base de base), alors que tout le reste (y compris les types fondamentaux) serait eval à faux.

par exemple.

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

Notez que je suis en train d'utiliser has_member_of_type dans ma bibliothèque pour détecter et utiliser une autre branche de code si la classe d'utilisateur dispose d'une variable membre d'un certain type.

Répondre

2

Non, ce n'est pas possible. Vous ne pouvez même pas accéder aux membres (à moins qu'on leur dise leur nom), et encore moins sonder leurs types.

Questions connexes