Heim > Backend-Entwicklung > C++ > Wie kann ich überprüfen, ob eine C-Klasse eine Mitgliedsfunktion mit einer bestimmten Signatur hat?

Wie kann ich überprüfen, ob eine C-Klasse eine Mitgliedsfunktion mit einer bestimmten Signatur hat?

DDD
Freigeben: 2024-12-30 08:55:09
Original
360 Leute haben es durchsucht

How Can I Check if a C   Class Has a Member Function with a Specific Signature?

Überprüfen der Existenz von Mitgliedsfunktionen mit benutzerdefinierter Signatur

In diesem Artikel befassen wir uns mit der Herausforderung, festzustellen, ob eine C-Klasse eine bestimmte Mitgliedsfunktion besitzt mit angegebener Signatur. Im Gegensatz zu dem im Buch von Scott Meyers diskutierten Problem besteht das Ziel hier darin, zwischen Klassen zu unterscheiden, die über die Funktion verfügen und denen diese fehlen.

Template-Trick

Um dies zu erreichen, stellen wir vor ein Vorlagentrick, der C 11-Funktionen nutzt. Die has_serialize-Vorlagenstruktur dient als primäre Vorlage und stellt sicher, dass der zweite Vorlagenparameter ein Funktionstyp sein muss.

Spezialisierung für Funktionsüberprüfung

Eine Spezialisierung der has_serialize-Vorlage übernimmt die eigentliche Funktionsüberprüfung. Es verwendet zwei Vorlagenfunktionen:

  • check: Versucht, die angegebene Methode für ein Dummy-Objekt aufzurufen, und prüft den Rückgabetyp anhand des erwarteten Typs.
  • type: Bestimmt, ob der Rückgabetyp der Prüffunktion entspricht dem erwarteten Typ.

Funktion Verifizierung

Zum Testen der Existenz einer bestimmten Funktion f(Args...) mit Signatur Ret(Args...) in Klasse C:

std::cout << has_serialize<C, Ret(Args...)>::value << endl;
Nach dem Login kopieren

Beispielverwendung

Im folgenden Beispiel definieren wir zwei Klassen, X und Y, wobei Y erbt von X. Klasse :

Dies zeigt, wie der Vorlagentrick has_serialize effektiv erkennen kann, ob eine Klasse eine bestimmte Mitgliedsfunktion einer bestimmten Klasse enthält Unterschrift.
struct X {
     int serialize(const std::string&amp;) { return 42; } 
};

struct Y : X {};

std::cout << has_serialize<X, int(const std::string&amp;)>::value << endl; // 1 (true)
std::cout << has_serialize<Y, int(const std::string&amp;)>::value << endl; // 1 (true)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich überprüfen, ob eine C-Klasse eine Mitgliedsfunktion mit einer bestimmten Signatur hat?. 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