我想为整数类型、字符串和其他类型定义函数。
我可以写:
template<typename T, typename = std::enable_if<std::is_integral<T>::value>::type>
void foo();
template<typename T, typename = std::enable_if<std::is_same<std::string>::value>::type>
void foo();
Run Code Online (Sandbox Code Playgroud)
但是我如何定义在其他情况下将被调用的函数(如果T不是整数类型而不是std::string)?
@Jarod42 是对的。我选择了错误的 SFINAE 使用方式。实际上,我必须在返回类型声明中使用 std::enable_if 。为了定义“默认”函数(对于所有其他类型),我只需要定义具有相同名称和...输入参数的函数。
template<typename T>
std::enable_if_t<std::is_integral<T>::value>
foo() { std::cout << "integral"; }
template<typename T>
std::enable_if_t<std::is_same<T, std::string>::value>
foo() { std::cout << "string"; }
template<typename T>
void foo(...) { std::cout << "other"; }
Run Code Online (Sandbox Code Playgroud)