Détection de l'existence de variables membres spécifiques dans une classe
Dans le code, vérifier la présence de variables membres particulières dans une classe peut être stimulant. Cela peut être crucial lors de la mise en œuvre d'algorithmes génériques ou du travail avec des classes avec des noms de membres différents.
Énoncé du problème :
Le code fourni vise à résoudre ce problème en vérifiant le existence de "x" (ou "X") et "y" (ou "Y") dans un argument de modèle de classe. Ceci est particulièrement utile dans les classes comme CPoint de MFC ou PointF de GDI, où les noms de variables membres diffèrent.
La solution originale utilisait différentes fonctions basées sur un modèle pour "x" et "X". Cependant, cela a entraîné des problèmes de compilation dans Visual Studio.
Solution universelle :
Pour obtenir une solution universelle, nous pouvons utiliser SFINAE (l'échec de substitution n'est pas une erreur) . Le code modifié ci-dessous illustre cette approche :
template <typename T> struct HasX : std::false_type { }; template <typename T> struct HasX<T, decltype((void)T::x, 0)> : std::true_type { };
Ce code exploite SFINAE en tentant de remplacer "T::x" dans le "decltype(...)". Si "T::x" est valide, la spécialisation pour HasX
Cette solution n'est pas limitée à C 11 et fournit une méthode générique pour détecter les variables membres dans n'importe quelle classe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!