En C, vérifier l'existence d'une fonction membre Operator== est simple en utilisant le fonction membre. Cependant, déterminer la présence d'un opérateur non membre == peut s'avérer plus difficile.
Méthode C 03 :
La technique suivante peut être utilisée pour vérifier la existence de tout opérateur :
namespace CHECK { class No { bool b[2]; }; template<typename T, typename Arg> No operator== (const T&, const Arg&); bool Check (...); No& Check (const No&); template <typename T, typename Arg = T> struct EqualExists { enum { value = (sizeof(Check(*(T*)(0) == *(Arg*)(0))) != sizeof(No)) }; }; }
Pour utiliser cette méthode, invoquez simplement l'EqualExists modèle :
CHECK::EqualExists<A>::value;
Si la valeur EqualExists est différente de zéro, l'opérateur non membre == existe.
Méthode C 11 :
C 11 fournit une approche plus propre en utilisant decltype et std::declval:
namespace CHECK { struct No {}; template<typename T, typename Arg> No operator== (const T&, const Arg&); template<typename T, typename Arg = T> struct EqualExists { enum { value = !std::is_same<decltype(std::declval<T>() < std::declval<Arg>()), No>::value }; }; }
Pour vérifier l'opérateur non membre ==, utilisez :
CHECK::EqualExists<A>::value;
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!