Avatar ·

Cómo verificar la presencia de un método en una clase template en C++

Hola a todos. Estoy escribiendo una biblioteca para trabajar con figuras geométricas en C++ y me encontré con un problema. Tengo una clase wrapper template que debe funcionar con diferentes tipos de figuras: círculo, cuadrado, triángulo, etc. Algunas de estas figuras tienen el método `getArea()`, que devuelve el área, y otras no (por ejemplo, una figura puede ser simplemente un conjunto de puntos). Necesito escribir una función template que: 1. Si la clase tiene el método `getArea()` — lo llame y devuelva el área. 2. Si no tiene el método — devuelva 0.0 o algún valor por defecto. Aquí hay un ejemplo de lo que estoy intentando hacer: ```cpp template double calculateArea(const T& shape) { // ¿Cómo verificar aquí si T tiene el método getArea()? if (/* condición de verificación */) { return shape.getArea(); } else { return 0.0; } } ``` Intenté usar `std::is_same` y `decltype`, pero no funciona. Según entiendo, esto está relacionado con SFINAE (Substitution Failure Is Not An Error).