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)