我有一个带有函数的泛型类,我想在编译时将其限制为仅浮点类型的实例。如下例所示:
template <typename T>
class ClassName
{
// instance variables, etc..
void some_method()
{
// do stuff, but only for floating point types
}
}
如何让编译器拒绝对非浮点类型的类名使用 some_method?
我一直在研究 SFINAE,但我就是无法让它工作,所以在失败几个小时后,我请求你的帮助。
谢谢:)
您可以结合使用 std::is_floating_point
和 std::enable_if
来仅启用浮点类型的函数:
#include <type_traits>
template <typename T>
class ClassName
{
// instance variables, etc..
public:
template<typename T2 = T,
typename = typename std::enable_if< std::is_floating_point<T2>::value >::type>
void some_method()
{
// do stuff, but only for floating point types
}
};
int main()
{
ClassName<double> d; // OK
d.some_method(); // OK
ClassName<int> i; // OK
i.some_method(); // ERROR
}