vérifier si le membre existe à l'aide de enable_if
Voici ce que j'essaie de faire:
template <typename T> struct Model
{
vector<T> vertices ;
#if T has a .normal member
void transform( Matrix m )
{
each vertex in vertices
{
vertex.pos = m * vertex.pos ;
vertex.normal = m * vertex.normal ;
}
}
#endif
#if T has NO .normal member
void transform( Matrix m )
{
each vertex in vertices
{
vertex.pos = m * vertex.pos ;
}
}
#endif
} ;
J'ai vu exemples de l'aide enable_if
, mais je ne peux pas comprendre comment appliquer enable_if
à ce problème, ou si elle peut même être appliquée.
enable_if
n'est pas utilisée pour vérifier si un membre existe, elle est plutôt utilisée pour supprimer les surcharges.- Je ne peux pas l'utiliser pour faire quelque chose comme (suggestion de modifier ci-dessus)?
- Non, vous êtes désireux d'un
static if
qui n'existe pas encore. Ce que vous voulez, c'est tout à fait possible, il ne peut pas utiliser une syntaxe comme ça.
Vous devez vous connecter pour publier un commentaire.
C'est devenu façon plus facile avec le C++11.
Choses à noter:
decltype
etsizeof
sans avoir besoin d'un objet.Vous avez besoin d'un méta fonction de détecter vos membres, de sorte que vous pouvez utiliser
enable_if
. L'idiome de faire ce qu'on appelle Membre Du Détecteur. C'est un peu délicat, mais il peut être fait!Ce n'est pas une réponse à votre cas précis, mais c'est une autre réponse à la question du titre et de problème en général.
Pertinentes https://ideone.com/utZqjk.
Crédits à dyreshark sur le réseau IRC freenode #c++.