Heim >Backend-Entwicklung >C++ >Wie kann ich das Vorhandensein bestimmter Mitgliedsvariablen in einer C-Klasse zuverlässig erkennen?
Erkennen des Vorhandenseins bestimmter Mitgliedsvariablen in einer Klasse
Im Code kann die Prüfung auf das Vorhandensein bestimmter Mitgliedsvariablen in einer Klasse erfolgen herausfordernd. Dies kann von entscheidender Bedeutung sein, wenn generische Algorithmen implementiert werden oder mit Klassen mit unterschiedlichen Mitgliedsnamen gearbeitet wird.
Problemstellung:
Der bereitgestellte Code zielt darauf ab, dieses Problem zu beheben, indem er nach dem sucht Existenz von „x“ (oder „X“) und „y“ (oder „Y“) in einem Klassenvorlagenargument. Dies ist besonders nützlich in Klassen wie CPoint von MFC oder PointF von GDI, in denen sich die Namen der Mitgliedsvariablen unterscheiden.
Die ursprüngliche Lösung verwendete unterschiedliche Vorlagenfunktionen für „x“ und „X“. Dies führte jedoch zu Kompilierungsproblemen in Visual Studio.
Universelle Lösung:
Um eine universelle Lösung zu erreichen, können wir SFINAE (Substitution Failure is Not an Error) verwenden. . Der folgende modifizierte Code veranschaulicht diesen Ansatz:
template <typename T> struct HasX : std::false_type { }; template <typename T> struct HasX<T, decltype((void)T::x, 0)> : std::true_type { };
Dieser Code nutzt SFINAE aus, indem er versucht, „T::x“ im „decltype(...)“ zu ersetzen. Wenn „T::x“ gültig ist, ist die Spezialisierung für HasX
Diese Lösung ist nicht auf C 11 beschränkt und bietet eine generische Methode zum Erkennen von Mitgliedsvariablen in jeder Klasse.
Das obige ist der detaillierte Inhalt vonWie kann ich das Vorhandensein bestimmter Mitgliedsvariablen in einer C-Klasse zuverlässig erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!