Ü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:
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;
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&) { return 42; } }; struct Y : X {}; std::cout << has_serialize<X, int(const std::string&)>::value << endl; // 1 (true) std::cout << has_serialize<Y, int(const std::string&)>::value << endl; // 1 (true)
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!