Ü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; }
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 { };
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!