Avatar ·

Wie man das Vorhandensein einer Methode bei einer Template-Klasse in C++ überprüft?

Hallo zusammen. Ich schreibe eine Bibliothek zur Arbeit mit geometrischen Figuren in C++ und bin auf ein Problem gestoßen. Ich habe eine Template-Wrapper-Klasse, die mit verschiedenen Figurentypen arbeiten soll: Kreis, Quadrat, Dreieck usw. Einige dieser Figuren haben eine Methode `getArea()`, die die Fläche zurückgibt, andere nicht (z.B. kann eine Figur einfach eine Menge von Punkten sein). Ich muss eine Template-Funktion schreiben, die: 1. Wenn die Klasse eine Methode `getArea()` hat – ruft sie diese auf und gibt die Fläche zurück. 2. Wenn die Methode nicht vorhanden ist – gibt sie 0.0 oder einen Standardwert zurück. Hier ist ein Beispiel dessen, was ich versuche: ```cpp template double calculateArea(const T& shape) { // Wie überprüfe ich hier, ob T eine Methode getArea() hat? if (/* Bedingung für Überprüfung */) { return shape.getArea(); } else { return 0.0; } } ``` Ich habe versucht, `std::is_same` und `decltype` zu verwenden, aber es hat nicht funktioniert. Soweit ich verstehe, hat das etwas mit SFINAE (Substitution Failure Is Not An Error) zu tun.