是否可以强制模板函数只接受某种数字类型的参数?

aCu*_*ria 1 c++

例如

template <typename T>
T foo(){ ... }
Run Code Online (Sandbox Code Playgroud)

其中T只能是浮点类型,即float/double/long double

And*_*ita 6

template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, T>::type foo() { ... }
Run Code Online (Sandbox Code Playgroud)

它是完全标准的SFINAE; 我们启用返回类型.如果T不是浮点类型,std::is_floating_point<T>::value将会提供false并且std::enable_if<false, T>不提供typetypedef,这会导致函数无法编译.

有关这些标准库类的信息,请参阅http://en.cppreference.com/w/cpp/types.