Avatar ·

如何在C++中检查模板类是否有某个方法?

大家好。我正在用C++编写一个处理几何图形的库,遇到了一个问题。我有一个模板包装类,需要处理不同类型的图形:圆形、正方形、三角形等。其中一些图形有返回面积的`getArea()`方法,而另一些没有(例如,图形可能只是一组点)。 我需要编写一个模板函数,实现: 1. 如果类有`getArea()`方法——调用它并返回面积。 2. 如果没有该方法——返回0.0或某个默认值。 以下是我尝试做的示例: ```cpp template double calculateArea(const T& shape) { // 如何在这里检查T是否有getArea()方法? if (/* 检查条件 */) { return shape.getArea(); } else { return 0.0; } } ``` 我尝试过使用`std::is_same`和`decltype`,但都不成功。据我所知,这与SFINAE(Substitution Failure Is Not An Error)有关。