Heim >Backend-Entwicklung >C++ >Verfügt meine Klasse über diese Memberfunktion?

Verfügt meine Klasse über diese Memberfunktion?

DDD
DDDOriginal
2024-12-21 08:20:11419Durchsuche

Does My Class Have This Member Function?

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&amp;) { return 42; } 
};

std::cout << has_serialize<Y, int(const std::string&amp;)>::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!

Stellungnahme:
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