解决模板函数不能特化问题


前言

众所周知,STL的函数模板不能特化,所以怎么解决这个问题呢在实际需要的时候,请看下文

一、解决函数模板不能特化问题

示例1返回值限定:

template <typename T> typename std::enable_if<std::is_same<char*, T>::value || std::is_same<const char*, T>::value>::type BindValue(sqlite3_stmt *pStatement, int iCurrent, T t);

template <typename T> typename std::enable_if<std::is_integral<T>::value>::type BindValue(sqlite3_stmt *pStatement, int iCurrent, T t);

template <typename T> typename std::enable_if<std::is_same < T, int64_t > ::value || std::is_same<T, uint64_t>::value> ::type BindlntValue(sqlite3_stmt *pStatement, int iCurrent, T t);

template <typename T> typename std::enable_if<!std::is_same<T, int64_t>::value && !std::is_same<T, uint64_t>::value>::type BindlntValue(sqlite3_stmt *pStatement, int iCurrent, T t);

示例2入参:
//对入参做限定,第二个入参类型为integral

template<class T>
T foo2(T t, typename std::enable_if<std::is_integral<T>::value,int>::type = 0)
{
	return t;
}

示例3:
//对模板参数T做了限定,T只能是integral

template <class T, class = typename std::enable_if<std::is_integral<T>::value>::type>
T foo3(T t)
{
	return t;
}

总结

使用std::enable_if解决模板函数不能特化问题;同时利用这个特性可以解决switch-case、if-else 带来的圈复杂度高的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值