Avatar ·

Comment vérifier la présence d'une méthode dans une classe template en C++ ?

Bonjour à tous. J'écris une bibliothèque pour travailler avec des formes géométriques en C++ et j'ai rencontré un problème. J'ai une classe wrapper template qui doit fonctionner avec différents types de formes : cercle, carré, triangle, etc. Certaines de ces formes ont une méthode `getArea()` qui retourne la surface, et d'autres non (par exemple, une forme peut être simplement un ensemble de points). J'ai besoin d'écrire une fonction template qui : 1. Si la classe a une méthode `getArea()` — l'appelle et retourne la surface. 2. Si la méthode n'existe pas — retourne 0.0 ou une valeur par défaut. Voici un exemple de ce que j'essaie de faire : ```cpp template double calculateArea(const T& shape) { // Comment vérifier ici si T a une méthode getArea() ? if (/* condition de vérification */) { return shape.getArea(); } else { return 0.0; } } ``` J'ai essayé d'utiliser `std::is_same` et `decltype`, mais rien ne fonctionne. D'après ce que je comprends, cela est lié à SFINAE (Substitution Failure Is Not An Error).