Maison > développement back-end > C++ > Comment puis-je vérifier l'existence d'un `operator==` non membre en C ?

Comment puis-je vérifier l'existence d'un `operator==` non membre en C ?

Mary-Kate Olsen
Libérer: 2024-12-02 16:50:11
original
814 Les gens l'ont consulté

How Can I Check for the Existence of a Non-Member `operator==` in C  ?

Vérification de l'existence d'un Operator== non membre en C

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&amp;, const Arg&amp;);

  bool Check (...);
  No&amp; Check (const No&amp;);

  template <typename T, typename Arg = T>
  struct EqualExists
  {
    enum { value = (sizeof(Check(*(T*)(0) == *(Arg*)(0))) != sizeof(No)) };
  };  
}
Copier après la connexion

Pour utiliser cette méthode, invoquez simplement l'EqualExists modèle :

CHECK::EqualExists<A>::value;
Copier après la connexion
Copier après la connexion

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&amp;, const Arg&amp;);

  template<typename T, typename Arg = T>
  struct EqualExists
  {
    enum { value = !std::is_same<decltype(std::declval<T>() < std::declval<Arg>()), No>::value };
  };  
}
Copier après la connexion

Pour vérifier l'opérateur non membre ==, utilisez :

CHECK::EqualExists<A>::value;
Copier après la connexion
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal