Maison >développement back-end >C++ >Comment puis-je vérifier l'existence des variables membres « x » ou « X » dans une classe de modèle C ?

Comment puis-je vérifier l'existence des variables membres « x » ou « X » dans une classe de modèle C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-25 08:25:12386parcourir

How Can I Check for the Existence of Member Variables

Vérification de l'existence de variables membres de classe en C

La question cherche un moyen de déterminer la présence de variables membres spécifiques, à savoir "x" ou "X", au sein d'une classe qui sert d'argument de modèle. Cette technique est particulièrement utile lorsque vous travaillez avec des classes comme MFC CPoint ou GDI PointF, dont chacune emploie un membre "x" distinct.

Solutions proposées

La réponse propose deux solutions :

1. Solution basée sur les macros :

Cette approche repose sur l'utilisation des macros du préprocesseur de Visual Studio :

template<class P> bool Check_x(P p, typename TT<sizeof(&P::x)>::type b = 0) { return true; }
template<class P> bool Check_x(P p, typename TT<sizeof(&P::X)>::type b = 0) { return false; }

Cependant, cette solution est limitée à Visual Studio et ne se compile pas en GNU C .

2. Solution basée sur C 11 :

Cette solution exploite les traits de type C 11 :

#include <type_traits>

template <typename T, typename = int>
struct HasX : std::false_type { };

template <typename T>
struct HasX <T, decltype((void) T::x, 0)> : std::true_type { };

Cette technique fonctionne en utilisant SFINAE (Substitution Failure Is Not An Error) pour vérifier les membres variables. Si une variable membre existe, la spécialisation de modèle pour le type correspondant sera invoquée, ce qui donnera une vraie valeur de retour. Sinon, le modèle par défaut sera sélectionné, produisant une fausse valeur de retour.

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