SFINAE zum Erkennen von Basisklassen-Memberfunktionen
In C wird SFINAE (Substitution Failure Is Not An Error) häufig verwendet, um nach zu suchen Vorhandensein einer bestimmten Mitgliedsfunktion in einer Klasse. Die Erkennung geerbter Mitgliedsfunktionen mithilfe von SFINAE erfordert jedoch einen komplexeren Ansatz.
Der in der Frage bereitgestellte Code versucht, SFINAE für diesen Zweck zu nutzen, berücksichtigt jedoch nicht die Vererbung. Um diese Einschränkung zu beheben, verwendet die hier vorgestellte Lösung eine andere Strategie.
Inspiriert durch die Diskussion in einem Boost-Benutzerthread wird die Vorlagenklasse has_foo definiert. Es nutzt einen Typprüfungsmechanismus, um zwischen direkten und geerbten Mitgliedsfunktionen zu unterscheiden. Die Deduce-Funktion versucht, einen Typ abzuleiten, der der erwarteten Signatur der Memberfunktion entspricht. Wenn die Ableitung erfolgreich ist (d. h. die Größe des abgeleiteten Typs ist „Ja“), wird das Ergebnisflag auf „true“ gesetzt, was das Vorhandensein der geerbten Mitgliedsfunktion anzeigt.
Anwenden dieser Lösung auf die Beispielklassen A, B, und C zeigen die Ergebnisse, dass has_foo geerbte Mitgliedsfunktionen in B korrekt erkennt.
Das obige ist der detaillierte Inhalt vonKann SFINAE verwendet werden, um geerbte Mitgliedsfunktionen in C zu erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!