Avatar ·

Como verificar se um método existe em uma classe template em C++?

Olá a todos. Estou escrevendo uma biblioteca para trabalhar com figuras geométricas em C++ e me deparei com um problema. Tenho uma classe wrapper template que deve funcionar com diferentes tipos de figuras: círculo, quadrado, triângulo, etc. Algumas dessas figuras têm o método `getArea()`, que retorna a área, e outras não (por exemplo, a figura pode ser apenas um conjunto de pontos). Preciso escrever uma função template que: 1. Se a classe tiver o método `getArea()` — o chame e retorne a área. 2. Se o método não existir — retorne 0.0 ou algum valor padrão. Aqui está um exemplo do que estou tentando fazer: ```cpp template double calculateArea(const T& shape) { // Como verificar aqui se T tem o método getArea()? if (/* condição de verificação */) { return shape.getArea(); } else { return 0.0; } } ``` Tentei usar `std::is_same` e `decltype`, mas não funcionou. Pelo que entendi, isso tem a ver com SFINAE (Substitution Failure Is Not An Error).