c++ 模板之 std::enable_if_t 理解.

c++ 模板之 std::enable_if_t 理解.

源码:

/// Alias template for enable_if
  template<bool _Cond, typename _Tp = void>
    using enable_if_t = typename enable_if<_Cond, _Tp>::type;
 /// 因为 enable_if_t = typename enable_if<_Cond, _Tp>::type. 所以如果 
 // enable_if<_Cond, _Tp>::type 不存在,就导致 enable_if_t  不存在
// 在看 enable_if 存在2个。一个是
// enable_if<bool,_Tp> 类形
// 还有一个是 enable_if<true,_Tp>. 
// 明显第二个是第一个的偏特化。
// 第一个,第二个的区别在于。第一个没有 type 类型
// 第二个有type 类型.
// enable_if_t = typename enable_if<_Cond, _Tp>::type。 就要看 _Cond = true还是 false。去匹配第一个还是第二个.匹配第一个,不好意思没有 type 类型,那么这个模板,就无法匹配到。 匹配到第二个,那就说明可以匹配.

// 第一个
 // Primary template.
  /// Define a member typedef @c type only if a boolean constant is true.
  template<bool, typename _Tp = void>
    struct enable_if
    { };


// 第二个
  // Partial specialization for true.
  template<typename _Tp>
    struct enable_if<true, _Tp>
    { typedef _Tp type; };


下面就上面的代码写2个demo.

#define COND true

template <typename T, typename type = std::enable_if_t<COND,T>>
T & getT(T & t){
    std::cout << __LINE__ <<"line_"<< std::endl;
    return t;
}


template <typename T, typename = std::enable_if_t<COND,T>>
class testT{
    public:
};
testT<int> t;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值