Heim > Backend-Entwicklung > C++ > Wie kann ich die Existenz der Mitgliedsvariablen „x' oder „X' in einer C-Vorlagenklasse überprüfen?

Wie kann ich die Existenz der Mitgliedsvariablen „x' oder „X' in einer C-Vorlagenklasse überprüfen?

Patricia Arquette
Freigeben: 2024-12-25 08:25:12
Original
382 Leute haben es durchsucht

How Can I Check for the Existence of Member Variables

Überprüfen der Existenz von Klassenmitgliedsvariablen in C

Die Frage sucht nach einer Möglichkeit, das Vorhandensein bestimmter Mitgliedsvariablen, nämlich „x“, zu bestimmen. oder „X“ innerhalb einer Klasse, die als Vorlagenargument dient. Diese Technik ist besonders nützlich, wenn Sie mit Klassen wie MFC CPoint oder GDI PointF arbeiten, von denen jede ein eigenes „x“-Mitglied verwendet.

Vorgeschlagene Lösungen

Die Antwort schlägt vor zwei Lösungen:

1. Makrobasierte Lösung:

Dieser Ansatz basiert auf der Verwendung der Präprozessormakros von 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; }
Nach dem Login kopieren

Diese Lösung ist jedoch auf Visual Studio beschränkt und lässt sich nicht in GNU C kompilieren.

2. C 11-basierte Lösung:

Diese Lösung nutzt die Typmerkmale von 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 { };
Nach dem Login kopieren

Diese Technik verwendet SFINAE (Substitution Failure Is Not An Error), um nach Mitgliedern zu suchen Variablen. Wenn eine Mitgliedsvariable vorhanden ist, wird die Vorlagenspezialisierung für den entsprechenden Typ aufgerufen, was zu einem echten Rückgabewert führt. Andernfalls wird die Standardvorlage ausgewählt, was zu einem falschen Rückgabewert führt.

Das obige ist der detaillierte Inhalt vonWie kann ich die Existenz der Mitgliedsvariablen „x' oder „X' in einer C-Vorlagenklasse ü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