目录
is_integral_v
is_same_v
enable_if
enable_if实现条件编译
is_integral_v
is_integral_v判断一个类型是不是整型
is_same_v
is_same_v判断两个类型是不是相同的类型
enable_if
enable_if就是通过模板偏特化实现重载,从而用来控制参数类型。
自定义版本:
templatestruct enable { // }; template struct enable { typedef T type; }; template typename enable < string, is_integral_v >::type ToString(T t) { return to_string(t); } int main() { cout << ToString(123); //cout << ToString("123"); //编译失败 return 0; }
ToString函数只接受整数类型的参数,否则会编译报错type。
使用库的版本:
templatetypename enable_if , string>::type ToString(T t) { return to_string(t); } int main() { cout << ToString(123); //cout << ToString("123"); //编译失败 return 0; }
enable_if实现条件编译
template
typename enable_if, string>::type ToString(T t)
{
return t;
}
template
typename enable_if, string>::type ToString(T t)
{
return to_string(t);
}
int main()
{
cout << ToString(1234567890);
cout << ToString(string("123"));
return 0;
}
这个代码实现了,如果是string类型的参数就直接返回,否则就调用to_string函数再返回。



