Verwenden von C 11 zur Bestimmung des Vorhandenseins einer Mitgliedsfunktion mit einer bestimmten Signatur
In C müssen Entwickler häufig überprüfen, ob eine Klasse vorhanden ist eine Memberfunktion mit einer bestimmten Signatur. Obwohl in der referenzierten Dokumentation nicht direkt darauf eingegangen wird, stellt dieser Artikel eine vorlagenbasierte Lösung vor, die diese Anforderung erfüllt.
Die vorgeschlagene Technik basiert auf C 11-Funktionen und gewährleistet so ihre Genauigkeit auch für geerbte Funktionen. Die Methode dreht sich um einen Test auf die Existenz einer Funktion namens „serialize“.
Template-Spezialisierung zur Funktionserkennung
Der Kern der Lösung liegt in der Spezialisierung von eine Vorlage mit dem Namen „has_serialize“. Die Parameter dieser Vorlage sind eine Klasse und eine Funktionssignatur, dargestellt als „Ret(Args...)“. Die Spezialisierung versucht, die Funktion „serialize“ für eine Instanz der Klasse aufzurufen und prüft, ob der Rückgabetyp mit der bereitgestellten Signatur übereinstimmt.
Wenn die Funktion vorhanden ist und ihr Rückgabetyp mit der angegebenen Signatur übereinstimmt, wird die Funktion „has_serialize „Die Vorlagenspezialisierung gibt „true“ zurück. Andernfalls wird false zurückgegeben.
Verwendungsbeispiel
Um die Verwendung dieser Lösung zu veranschaulichen, betrachten Sie den folgenden Code:
struct X { int serialize(const std::string&); }; struct Y : X {}; std::cout << has_serialize<Y, int(const std::string&)>::value; // will print 1
In this Beispielsweise wird die Vorlage „has_serialize“ verwendet, um zu bestimmen, ob die Klasse „Y“ eine „serialize“-Funktion besitzt, die eine Zeichenfolge als Argument akzeptiert und eine Ganzzahl zurückgibt. Da „Y“ diese Funktion von „X“ erbt, ist das Ergebnis wahr, was zur Ausgabe von 1 führt.
Das obige ist der detaillierte Inhalt vonVerfügt meine Klasse über eine bestimmte Memberfunktion „serialisieren'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!