vs2019 c++中模板 enable_if_t 的使用

(1) 该模板的定义如下:

template <bool _Test, class _Ty = void>
struct enable_if {}; // no member "type" when !_Test

template <class _Ty>
struct enable_if<true, _Ty> { // type is _Ty for _Test
    using type = _Ty;
};

template <bool _Test, class _Ty = void>
using enable_if_t = typename enable_if<_Test, _Ty>::type;

当第一个模板参数为 true 时 , 名称 enable_if_t 才对应类型名 _Ty 。进而可以用 enable_if_t 来定义变量。
看源码时,经常出现的情况是类的成员函数是模板函数,但对成员函数的模板参数的类型加以限制。
即某些条件满足时才可以调用类的该成员函数。若类里只有一个具有此名字的成员函数,且对其调用的条件不满足(没有给出合适的模板参数),结果是在编译阶段,代码就报错了。这就是使用 enable_if_t 的好处。
举个 STL 库中为类的模板成员函数使用 enable_if_t 的例子:

在这里插入图片描述

(2)写个小练习:

在这里插入图片描述

上例中的 A 只可以接受 char 类型的实参。若以其它类型为实参,则编译阶段就报错了,很神奇呢:

在这里插入图片描述

谢谢阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhangkeji

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值