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).