Heim >Backend-Entwicklung >C++ >Wie kann Metaprogrammierung das Vorhandensein von Mitgliedsvariablen in C-Klassen erkennen?
Mitgliedsvariablen mithilfe von Metaprogrammierung erkennen
Frage:
Wie können wir feststellen, ob eine Klasse enthält eine bestimmte Mitgliedsvariable, auch wenn ihr Name unbekannt ist oder in verschiedenen Versionen unterschiedliche Namen verwendet werden Klassen?
Lösung:
Ein Ansatz umfasst Metaprogrammierungstechniken und nutzt den Decltype-Operator und SFINAE (Substitution Failure Is Not An Error). Betrachten Sie den folgenden Code:
#include <type_traits> template <typename t typename="int"> struct HasX : std::false_type { }; template <typename t> struct HasX<t decltype t::x> : std::true_type { };</t></typename></typename></type_traits>
Erklärung:
Verwendung:
Um diese Technik zu verwenden, deklarieren Sie die Vorlage wie folgt:
template <typename t> bool Check_x(T p, typename HasX<t>::type b = 0) { return true; }</t></typename>
Diese Prüfung würde „true“ für Klassen mit einer x-Mitgliedsvariablen zurückgeben, wie zum Beispiel:
struct P1 { int x; };
und false für diejenigen ohne, wie zum Beispiel: als:
struct P2 { float X; };
Hinweis:
Diese Lösung vermeidet die Verwendung von C 11-Funktionen wie std::is_member_function_pointer, um die Kompatibilität mit älteren Compilern aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonWie kann Metaprogrammierung das Vorhandensein von Mitgliedsvariablen in C-Klassen erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!