C++ enable_if

举报
用户已注销 发表于 2022/06/12 00:59:07 2022/06/12
【摘要】 目录 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_same_v

enable_if

enable_if实现条件编译


is_integral_v

is_integral_v判断一个类型是不是整型

is_same_v

is_same_v判断两个类型是不是相同的类型

enable_if

enable_if就是通过模板偏特化实现重载,从而用来控制参数类型。

自定义版本:


  
  1. template<typename T, bool flag>
  2. struct enable {
  3. //
  4. };
  5. template<typename T>
  6. struct enable<T, true> {
  7. typedef T type;
  8. };
  9. template<typename T>
  10. typename enable < string, is_integral_v<T>>::type ToString(T t)
  11. {
  12. return to_string(t);
  13. }
  14. int main()
  15. {
  16. cout << ToString(123);
  17. //cout << ToString("123"); //编译失败
  18. return 0;
  19. }

ToString函数只接受整数类型的参数,否则会编译报错type。

使用库的版本:


  
  1. template<typename T>
  2. typename enable_if<is_integral_v<T>, string>::type ToString(T t)
  3. {
  4. return to_string(t);
  5. }
  6. int main()
  7. {
  8. cout << ToString(123);
  9. //cout << ToString("123"); //编译失败
  10. return 0;
  11. }

enable_if实现条件编译


  
  1. template<typename T>
  2. typename enable_if<is_same_v<T, string>, string>::type ToString(T t)
  3. {
  4. return t;
  5. }
  6. template<typename T>
  7. typename enable_if<!is_same_v<T, string>, string>::type ToString(T t)
  8. {
  9. return to_string(t);
  10. }
  11. int main()
  12. {
  13. cout << ToString(1234567890);
  14. cout << ToString(string("123"));
  15. return 0;
  16. }

这个代码实现了,如果是string类型的参数就直接返回,否则就调用to_string函数再返回。

文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nameofcsdn/article/details/125232528

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。