C++ enable_if
【摘要】
目录
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就是通过模板偏特化实现...
目录
is_integral_v
is_integral_v判断一个类型是不是整型
is_same_v
is_same_v判断两个类型是不是相同的类型
enable_if
enable_if就是通过模板偏特化实现重载,从而用来控制参数类型。
自定义版本:
-
template<typename T, bool flag>
-
struct enable {
-
//
-
};
-
template<typename T>
-
struct enable<T, true> {
-
typedef T type;
-
};
-
-
template<typename T>
-
typename enable < string, is_integral_v<T>>::type ToString(T t)
-
{
-
return to_string(t);
-
}
-
-
int main()
-
{
-
cout << ToString(123);
-
//cout << ToString("123"); //编译失败
-
return 0;
-
}
ToString函数只接受整数类型的参数,否则会编译报错type。
使用库的版本:
-
template<typename T>
-
typename enable_if<is_integral_v<T>, string>::type ToString(T t)
-
{
-
return to_string(t);
-
}
-
-
int main()
-
{
-
cout << ToString(123);
-
//cout << ToString("123"); //编译失败
-
return 0;
-
}
enable_if实现条件编译
-
template<typename T>
-
typename enable_if<is_same_v<T, string>, string>::type ToString(T t)
-
{
-
return t;
-
}
-
template<typename T>
-
typename enable_if<!is_same_v<T, string>, string>::type ToString(T t)
-
{
-
return to_string(t);
-
}
-
-
int main()
-
{
-
cout << ToString(1234567890);
-
cout << ToString(string("123"));
-
return 0;
-
}
这个代码实现了,如果是string类型的参数就直接返回,否则就调用to_string函数再返回。
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/125232528
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)