c++中enable_if的使用

1、enable_if是什么:

        enable_if是c++中的一个标准模板,它的一种定义方式如下:

template<bool B,class T = void>
struct enable_if{};

template<class T>
struct enable_if<true,T>{
    typedef T type;
};

        从上面的定义可以看出,enable_if是一个模板类,且对该模板类有一个偏特化的版本。也就是当B为true时,会使用第二个模板来进行实例化。两个的区别在于第一个结构体什么也没做,但是第二个版本却将模板类T命名为type。这导致我们在使用enable_if的type属性时,提供给模板的第一个参数不同将会得到不一样的结果。

        

2、enable_if的使用:

enable_if<condition,T>::type;

        当condition为false时,那么由前面的模板,此时会使用第一个模板来实例化,所以结构体中什么也不会做,所以type属性没有值。当condition为true时,那么type类型就将是和T一样的类型。

3、例子

int a;
typename std::enable_if<a == 1,int>::type *a;  //当a==1时,condition为true,那么type为int,所以会声明一个int* a;
 
typename std::enable_if<!(a == 1),double>::type *a;  //a !=1时,condition为true,那么type为double,所以会声明一个double* a;

        在上面的例子中,当a==1时,第一个的condition为true,所以会声明一个int* a;但是如果a != 1,那么第二个的condition成立,会声明一个double* a;

        enable_if可以使用在模板函数的返回值或者参数中。从而可以通过条件来选择是否产生对应的模板函数。具体可以参看这篇文章:

https://blog.csdn.net/jeffasd/article/details/84667071?spm=1001.2014.3001.5506

以上代码仅为示例,不一定能运行,新入坑菜鸟,有错欢迎指出。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值