Heim > Backend-Entwicklung > C++ > Wie kann ich die Existenz eines Nicht-Mitglieds „operator==' in C überprüfen?

Wie kann ich die Existenz eines Nicht-Mitglieds „operator==' in C überprüfen?

Mary-Kate Olsen
Freigeben: 2024-12-02 16:50:11
Original
817 Leute haben es durchsucht

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

Prüfen auf das Vorhandensein einer Nicht-Mitgliedsfunktion „operator==“ in C

In C ist die Prüfung auf das Vorhandensein einer Mitgliedsfunktion „operator==“ mithilfe der bereitgestellten Funktion unkompliziert Mitgliedsfunktion. Allerdings kann es sich als schwieriger erweisen, das Vorhandensein eines Nichtmitglieds-Operators== zu ermitteln.

C 03-Methode:

Die folgende Technik kann verwendet werden, um zu prüfen, ob Existenz eines beliebigen Operators:

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)) };
  };  
}
Nach dem Login kopieren

Um diese Methode zu verwenden, rufen Sie einfach EqualExists auf Vorlage:

CHECK::EqualExists<A>::value;
Nach dem Login kopieren
Nach dem Login kopieren

Wenn der EqualExists-Wert ungleich Null ist, existiert der Nichtmitgliedsoperator ==.

C 11-Methode:

C 11 bietet einen saubereren Ansatz mit decltype und 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 };
  };  
}
Nach dem Login kopieren

Zur Überprüfung der Nicht-Mitgliedsoperator==, verwenden Sie:

CHECK::EqualExists<A>::value;
Nach dem Login kopieren
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich die Existenz eines Nicht-Mitglieds „operator==' in C überprüfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage