Maison >développement back-end >C++ >Comment puis-je détecter de manière fiable l'existence de variables membres spécifiques dans une classe C ?

Comment puis-je détecter de manière fiable l'existence de variables membres spécifiques dans une classe C ?

DDD
DDDoriginal
2024-12-21 10:13:18585parcourir

How Can I Reliably Detect the Existence of Specific Member Variables in a C   Class?

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 sera utilisé, ce qui signifie que HasX::value est vrai ; sinon, ce sera faux.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn