Heim >Backend-Entwicklung >C++ >Verfügt meine Klasse über diese Memberfunktion?
Prüfung auf eine Klassenmitgliedsfunktion einer gegebenen Signatur
Stellen Sie sich die Herausforderung vor, zu überprüfen, ob eine Klasse eine bestimmte Mitgliedsfunktion einer vorgegebenen Klasse besitzt Unterschrift. Obwohl dieses Problem mit dem in Scott Meyers' Effective C Third Edition diskutierten Konzept zusammenhängt, erfordert es eine eindeutige Lösung.
Das Problem und die Anforderung
Im Gegensatz zum Szenario von Meyers, bei dem sichergestellt wurde Da die Existenz einer Mitgliedsfunktion für die Kompilierung von entscheidender Bedeutung ist, erfordert diese Situation einen flexiblen Ansatz. Das Ziel besteht darin, zwischen Klassen zu unterscheiden, die die gewünschte Mitgliedsfunktion implementieren, und solchen, die dies nicht tun, und entsprechend unterschiedliche Aktionen auszulösen.
Eine Vorlagenlösung
C 11 stellt eine Vorlage bereit -basierte Lösung, die Mitgliedsfunktionen effektiv erkennt, auch solche, die geerbt wurden. Die bereitgestellte Implementierung basiert auf dem Merkmal is_same, um die Kompatibilität des Rückgabetyps zu prüfen:
#include <type_traits> // Check member function presence and return type correctness template<typename C, typename Ret, typename... Args> struct has_serialize { static constexpr bool value = std::is_same< decltype( std::declval<T>().serialize( std::declval<Args>()... ) ), Ret >::type::value; };
Verwendung
Um diesen Ansatz zu verwenden, geben Sie einfach die zu prüfende Klasse an mit dem Rückgabetyp und den Argumenten der Mitgliedsfunktion:
struct X { int serialize(const std::string&) { return 42; } }; std::cout << has_serialize<Y, int(const std::string&)>::value; // prints 1
Das obige ist der detaillierte Inhalt vonVerfügt meine Klasse über diese Memberfunktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!