Heim > Backend-Entwicklung > C++ > Wie kann ich das Vorhandensein bestimmter Mitgliedsvariablen in einer C-Klasse zuverlässig erkennen?

Wie kann ich das Vorhandensein bestimmter Mitgliedsvariablen in einer C-Klasse zuverlässig erkennen?

DDD
Freigeben: 2024-12-21 10:13:18
Original
630 Leute haben es durchsucht

How Can I Reliably Detect the Existence of Specific Member Variables in a C   Class?

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

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 wird verwendet, was dazu führt, dass HasX::value true ist; andernfalls ist es falsch.

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage